FileUpload这个控件我在随笔:
《在数据库中 存储图片 以及 在界面中显示图片(存储图片路径)- 这种方法相对与存储二进制文件好》之中,已经做了介绍,那篇随笔只是介绍上传图片,FIleUpload控件实质上是一个文件上传控件。
下面文章是转自:(URL:http://www.cnblogs.com/hide0511/archive/2006/09/24/513201.html):
用户选择要上载的文件后,FileUpload 控件不会自动将该文件保存到服务器。您必须显式提供一个控件或机制,使用户能提交指定的文件。例如,可以提供一个按钮,用户单击它即可上载文件。为保存指定文件所写的代码应调用 SaveAs 方法,该方法将文件内容保存到服务器上的指定路径。通常,在引发回发到服务器的事件的事件处理方法中调用 SaveAs 方法。
在文件上传的过程中,文件数据作为页面请求的一部分,上传并缓存到服务器的内存中,然后再写入服务器的物理硬盘中。
有三个方面需要注意:
1.确认是否包含文件
在调用 SaveAs 方法将文件保存到服务器之前,使用 HasFile 属性来验证 FileUpload 控件确实包含文件。若 HasFile 返回 true,则调用 SaveAs 方法。如果它返回false,则向用户显示消息,指示控件不包含文件。不要通过检查PostedFile 属性来确定要上载的文件是否存在,因为默认情况下该属性包含 0 字节。因此,即使FileUpload 控件为空,PostedFile 属性仍返回一个非空值。
2.文件上传大小限制
上载较大文件时,用户也可能接收到以下错误信息:
aspnet_wp.exe (PID: 1520) was recycled because memory consumption exceeded 460 MB (60 percent of available RAM).
以上信息说明,上传文件的大小不能超过服务器内存大小的60%。这里的60%是Web。config文件的默认配置,是<processModel>配置节中的 memoryLimit 属性默认值。虽然可以修改,但是如果上传文件越大,成功几率越小,不建议使用。
3.上传文件夹的写入权限
应用程序可以通过两种方式获得写访问权限。您可以将要保存上载文件的目录的写访问权限显式授予运行应用程序所使用的帐户。您也可以提高为 ASP.NET 应用程序授予的信任级别。若要使应用程序获得执行目录的写访问权限,必须将 AspNetHostingPermission 对象授予应用程序并将其信任级别设置为AspNetHostingPermissionLevel.Medium 值。提高信任级别可提高应用程序对服务器资源的访问权限。请注意,该方法并不安全,因为如果怀有恶意的用户控制了应用程序,他(她)也能以更高的信任级别运行应用程序。最好的做法就是在仅具有运行该应用程序所需的最低特权的用户上下文中运行 ASP.NET 应用程序。
FileUpload控件的常用属性:
属性 |
数据类型 |
说明 |
FileBytes |
byte[] |
获取上传文件的字节数组 |
FileContent |
Stream |
获取指定上传文件的Stream对象 |
FileName |
String |
获取上传文件在客户端的文件名称 |
HasFile |
Bool |
获取一个布尔值,用于表示FileUpload控件是否已经包含一个文件 |
PostedFile |
HttpPostedFile |
获取一个与上传文件相关的HttpPostedFile对象,使用该对象可以获取上传文件的相关属性 |
可以通过3种方法访问上传文件:
1.通过FileBytes属性。该属性将上传文件数据置于字节数组中,遍历该数组,则能够以字节方式了解上传文件的内容。
2.通过FileContent属性。调用该属性可以获得一个指向上传文件的Stream对象。可以使用该属性读取上传文件数据,并使用FileBytes属性显示文件内容。
3.通过PostedFile属性。调用该属性可以获得一个与上传文件相关的HttpPostedFile对象,使用该对象可以获得与上传文件相关的信息。例如,调用HttpPostedFile对象的ContentLength,可以获得上传文件大小;调用HttpPostedFile对象的ContentType属性,可以获得上传文件的类型;调用HttpPostedFile对象的FileName属性,可以获得上传文件在客户端的完整路径(调用FileUpload控件的FileName属性,仅能获得文件名)。
示例:
前台代码:
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 <html xmlns="http://www.w3.org/1999/xhtml"> 5 <head runat="server"> 6 <title>示例8-3</title> 7 <link id="InstanceStyle" href="StyleSheet.css" type="text/css" rel="stylesheet" /> 8 </head> 9 <body> 10 <form id="Form1" runat="server"> 11 <div> 12 <fieldset style=" 290px"> 13 <legend class="mainTitle">FileUpload控件典型应用</legend> 14 <br /> 15 <asp:FileUpload ID="FileUpload1" runat="server" /> 16 <asp:Button ID="BtnUpload" runat="server" Text="上传" OnClick="BtnUpload_Click" /> 17 <hr /> 18 <asp:Label ID="LabMessage1" runat="server" ForeColor="red" /><br /> 19 <asp:Label ID="LabMessage2" runat="server" /> 20 </fieldset> 21 </div> 22 </form> 23 </body> 24 </html>
后台代码(模仿MSDN):
1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Web; 5 using System.Web.Security; 6 using System.Web.UI; 7 using System.Web.UI.WebControls; 8 using System.Web.UI.WebControls.WebParts; 9 using System.Web.UI.HtmlControls; 10 11 public partial class _Default : System.Web.UI.Page 12 { 13 protected void Page_Load(object sender, EventArgs e) 14 { 15 } 16 protected void BtnUpload_Click(object sender, EventArgs e) 17 { 18 bool fileOK = false; 19 string path = Server.MapPath("~/Temp/"); 20 if (FileUpload1.HasFile) 21 { 22 String fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower(); 23 String[] allowedExtensions = { ".gif", ".png", ".bmp", ".jpg" }; 24 for (int i = 0; i < allowedExtensions.Length; i++) 25 { 26 if (fileExtension == allowedExtensions[i]) 27 { 28 fileOK = true; 29 } 30 } 31 } 32 if (fileOK) 33 { 34 try 35 { 36 FileUpload1.SaveAs(path + FileUpload1.FileName); 37 LabMessage1.Text = "文件上传成功."; 38 LabMessage2.Text = "<b>原文件路径:</b>" + FileUpload1.PostedFile.FileName + "<br />" + 39 "<b>文件大小:</b>" + FileUpload1.PostedFile.ContentLength + "字节<br />" + 40 "<b>文件类型:</b>" + FileUpload1.PostedFile.ContentType + "<br />"; 41 } 42 catch (Exception ex) 43 { 44 LabMessage1.Text = "文件上传不成功."; 45 } 46 } 47 else 48 { 49 LabMessage1.Text = "只能够上传图片文件."; 50 } 51 } 52 }
通过对以上的示例进行分析,我们还可以用验证控件来实现对文件类型的验证:
正则表达式:
1 <ASP:RegularExpressionValidator 2 id="RegularExpressionValidator1" runat="server" 3 ErrorMessage="Only mp3, m3u or mpeg files are allowed!" 4 ValidationExpression="^(([a-zA-Z]:)|(\{2}w+)$?)(\(w[w].*)) 5 +(.mp3|.MP3|.mpeg|.MPEG|.m3u|.M3U)$" 6 ControlToValidate="FileUpload1"> 7 </ASP:RegularExpressionValidator> 8 <br /> 9 <ASP:RequiredFieldValidator 10 id="RequiredFieldValidator1" runat="server" 11 ErrorMessage="This is a required field!" 12 ControlToValidate="FileUpload1"> 13 </ASP:RequiredFieldValidator>
以上就是FileUpload控件的使用方法.