在本文中,我将简要地总结ASP.NET 2.0中HtmlInputFile控件的使用要点,并给出一个典型的ASPX页面示例。
HtmlInputFile是把文件从一个浏览器上传到Web服务器的HTML工具。①为了充分利用HtmlInputFile控件,首先应确保服务器窗体的Enctype属性设置为multipart/form-data。
注意:在ASP.NET 2.0中,在生成该控件的标记之前系统会自动地设置合适的Enctype属性。
注意:在ASP.NET 2.0中,在生成该控件的标记之前系统会自动地设置合适的Enctype属性。
其实,生成HTML的方法与具体的浏览器有关,但是它通常是由一个文本框和一个浏览按钮组成的。用户从本地机器上选择一个文件,然后单击该按钮把页面提交给服务器。这时,浏览器把所选的文件上传到服务器,如下图所示。
注意 在ASP.NET之前,需要在后台运行一个服务器端进程,即Posting Acceptor,以处理multipart/form-data提交。ASP.NET不再需要Posting Acceptor,因为它是通过ASP.NET运行库实现的。
②在服务器上,文件放在一个HttpPostedFile类型的对象中,并且在此一直放到被处理为止(例如,保存到磁盘或数据库)。HttpPostedFile对象提供了一些属性和方法,用来获得各文件的相关信息,以及读取和保存该文件。以下代码说明了如何把一个投递的文件保存到磁盘上的一个特定文件夹中:
<% @ Page language="C#" %> <% @ Import Namespace="System.IO" %> < script runat ="server" > void UploadButton_Click(object sender, EventArgs e) { // 指定在服务器端要保存上传文件的路径。 // *** 假定路径存在*** string savePath = UploadPath.Text; if (!Directory.Exists(savePath)) { Response.Write(String.Format("<h1>上传文件路径不存在:{0}</h1>", savePath)); Response.End(); } // 在试图操作文件前, // 先验证FileUpload 控件包含一个文件 if (FileUpload1.HasFile) { // 取得要上传的文件名 string fileName = FileUpload1.FileName; // 把文件名添加到上传路径 savePath += fileName; // 调用SaveAs 方法来把上传文件保存到指定路径下。 // 注意,本示例并没有实现所有必要错误检查操作。 // 如果同名字的文件已经存在,则上传文件将覆盖之。 FileUpload1.SaveAs(savePath); // 通知用户文件名保存的位置 UploadStatusLabel.Text = "文件被保存为: <i>" + savePath + "</i>"; } else { // 通知用户没有上传一个文件. UploadStatusLabel.Text = "你没有指定要上传的文件。"; } } </ script > < html > < head runat ="server" > < title > ASP.NET 2.0之HtmlInputFile控件使用小结 </ title > </ head > < body > < form runat ="server" > < h4 style ="text-align: center" > < span style ="font-size: 24pt; color: #000099" > 请选择要上传的文件: </ span ></ h4 > < b ></ b >< strong > 上传文件保存路径 </ strong >< br /> < asp:textbox id ="UploadPath" runat ="server" text ="c:\temp\" /> < hr /> < b > 要上传的文件 </ b >< br /> < asp:fileupload id ="FileUpload1" runat ="server" /> < br >< br > < asp:button id ="UploadButton" text ="开始上传文件" onclick ="UploadButton_Click" runat ="server" > </ asp:button > < hr /> < asp:label id ="UploadStatusLabel" runat ="server" > </ asp:label > </ form > </ body > </ html >
③我们还可以使用HttpPostedFile对象的InputStream属性在持久性或处理之前读取投递的数据。HtmlInputFile控件还允许我们限制上传到服务器的文件类型。为此,你只需要使用一个以逗号分离的MINE类型列表设置Accept属性即可。
④注意,在使用SaveAs方法时,一定要指定到达输出文件的完整路径。如果你提供的是一个相对路径,则ASP.NET试图把文件放入系统目录下。这种做法会导致“Access denied”错误。此外,一定要为ASP.NET使用的帐号提供我们想用来存储文件的目录的写入权限。
⑤此外,ASP.NET对上传的数据量实施一些控制。你可以通过配置文件web.config中的<httpRuntime>节中的 MaxRequestLength属性设置最大允许的文件大小。如果文件超过规定的大小(默认为4MB),浏览器中就会产生一个错误。而当上传大型文件时,由于系统内存过度消耗,也会产生另一种运行时错误;因此,这时要采取特别措施。
最后,本文所附示例页面在Windows XP+.net 2.0+Visual Web Developer 2005 Express Edition环境下调试通过。
本文转自朱先忠老师51CTO博客,原文链接:http://blog.51cto.com/zhuxianzhong/59365
,如需转载请自行联系原作者