2014-08-09 22:39:15|?次阅读|上传:huigezrx【已有?条评论】发表评论
关键词:ASP.NET, C#, 界面设计, Web|来源:唯设编程网
FileUpload控件的主要功能是向服务器的指定目录上传文件,该控件包括一个文本和一个浏览按钮。用户可以在文本框中输入完整的文件路径,或者通过按钮浏览并选择需要上传的文件。
FileUpload控件不会自动上传文件,必须设置相关的事件处理程序,并在程序中实现文件上传功能。例如,可以提供一个按钮,用户单击它即可上传文件。为保存指定文件所写的代码应调用 FileUpload控件的SaveAs 方法,该方法将文件内容保存到服务器上的指定路径。通常,在引发回发到服务器的事件的事件处理方法中调用 SaveAs 方法。
在文件上传的过程中,文件数据作为页面请求的一部分,上传并缓存到服务器的内存中,然后再写入服务器的物理硬盘中。
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属性,仅能获得文件名称)。
FileUpload控件包括一个核心方法SaveAs(String filename),其中,参数filename是指被保存在服务器中的上传文件的绝对路径。通常在事件处理程序中调用SaveAs方法。在使用FileUpload控件的时候,你通常需要注意三个方面的问题:
1.确认是否包含文件
在调用 SaveAs 方法将文件保存到服务器之前,使用 HasFile 属性来验证 FileUpload 控件确实包含文件。若 HasFile 返回 true,则调用 SaveAs 方法。如果它返回 false,则向用户显示消息,指示控件不包含文件。不要通过检查PostedFile 属性来确定要上载的文件是否存在,因为默认情况下该属性包含 0 字节。因此,即使 FileUpload 控件为空,PostedFile 属性仍返回一个非空值。
2.文件上传大小限制
默认情况下,上传文件大小限制为 4096 KB (4 MB)。可以通过设置 httpRuntime 元素的 maxRequestLength 属性来允许上载更大的文件。若要增加整个应用程序所允许的最大文件大小,请设置 Web.config 文件中的 maxRequestLength 属性。如下所示:
<configuration> <system.web> <httpRuntime maxRequestLength="4096" executionTimeout="120"/> </system.web> </configuration>
设置说明:
1). maxRequestLength 属性限制上传文件的大小,以 KB 为单位,默认值为 4096KB,最大上限为 2097151KB,大约为 2GB;
2). executionTimeout 属性限制上传文件的时间,以 秒(s)为单位,默认值为 90s,如果考虑到所设计的Web应用系统上传时间要超过 90s,可延长设定值。
3). 若要增加指定页所允许的最大文件大小,请设置 Web.config 中 location 元素内的 maxRequestLength 属性。
上载较大文件时,用户也可能接收到以下错误信息:
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控件的使用方法,首先是HTML文件:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>示例8-3</title> <link id="InstanceStyle" href="StyleSheet.css" type="text/css" rel="stylesheet" /> </head> <body> <form id="Form1" runat="server"> <div> <fieldset style="width: 290px"> <legend class="mainTitle">FileUpload控件典型应用</legend> <br /> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="BtnUpload" runat="server" Text="上传" OnClick="BtnUpload_Click" /> <hr /> <asp:Label ID="LabMessage1" runat="server" ForeColor="red" /><br /> <asp:Label ID="LabMessage2" runat="server" /> </fieldset> </div> </form> </body> </html>