今天看到一段代码,觉得还可以,虽然作者想要的功能没能够实现,但是值得讨论。
首先,我们想想要实现这样的功能该怎么做呢?
首先我们用经典的IFrame控件来实现文件的异步上传,也就是说文件上传的服务器端处理不是在原来页面的后置文件中,而是在Iframe窗口所打开的文件的后置代码中。注意,主窗口和Iframe窗口可以打开同一个地址的网页,也就是同一个网页,但是在服务器端,他们分别属于不同的实例,不同的Viewstate处理单位。
其次,我们需要文件上床成功后,在主页面刷新缩略图,因为文件上传的服务器端处理不是在原来页面的后置文件中,因此不可以直接在服务器端使用UpdatePanel.Update(),我们只能等文件上传完成并返回到客户端的Iframe窗口的时候发送消息到传页面通知其刷新缩略图,或者直接把缩略图的地址赋值给主页面的某个图片的SRC属性。注意,缩略图的地址可能并不是某个图片的地址,因为一般不存储一个缩略图副本在服务器文件系统,一般直接把一个ASPX文件的地址赋值给SRC属性,这个ASPX文件用于从原图生成缩略图并返回缩略图到客户端,关于生成缩略图的代码,请参考我的下一篇随笔。
以下代码仅供参考,并没有实现在主页面刷新缩略图的功能。
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Subgurim.Controles;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
private String ImageFolder = "~/temp";
private Int32 ImgPerRow = 8;
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager1.RegisterAsyncPostBackControl(FileUploaderAJAX1);
if (FileUploaderAJAX1.IsPosting)
this.managePost();
if (!Page.IsPostBack)
{
GenerateImagesTable();
}
}
private void managePost()
{
HttpPostedFileAJAX pf = FileUploaderAJAX1.PostedFile;
if ((pf.ContentType.Equals("image/gif") || pf.ContentType.Equals("image/jpeg") || pf.ContentType.Equals("image/pjpeg")) && pf.ContentLength <= 100 * 1024)
FileUploaderAJAX1.SaveAs("~/temp", pf.FileName);

GenerateImagesTable();
UpdatePanel1.Update();
}
private void GenerateImagesTable()
{
DirectoryInfo dir = new DirectoryInfo(MapPath(ImageFolder));
FileInfo[] files = dir.GetFiles();
UpdatePanel1.ContentTemplateContainer.Controls.Clear();
if (files.Length == 0)
{
UpdatePanel1.ContentTemplateContainer.Controls.Add(new LiteralControl("Pas de fichiers présents dans ce dossier"));
return;
}
Table ImgTable = new Table();
TableRow ImgTableRow = new TableRow();
TableCell ImgTableCell = new TableCell();
UpdatePanel1.ContentTemplateContainer.Controls.Add(ImgTable);
ImgTable.Rows.Add(ImgTableRow);
ImgTable.Width = Unit.Percentage(100);
Int32 i = 0;
foreach (FileInfo file in files)
{
String FileName = file.Name;
if (i++ == ImgPerRow)
{
ImgTableRow = new TableRow();
ImgTable.Rows.Add(ImgTableRow);
i = 1;
}
ImgTableCell = new TableCell();
ImgTableRow.Cells.Add(ImgTableCell);
ImgTableCell.HorizontalAlign = HorizontalAlign.Center;
ImgTableCell.Width = Unit.Percentage(12.5);
Image myImage = new Image();
myImage.ImageUrl = ImageFolder + "/" + FileName;
myImage.Width = Unit.Pixel(50);
myImage.Height = Unit.Pixel(50);
ImgTableCell.Controls.Add(myImage);
}
}
}
浙公网安备 33010602011771号