2024年8月16日发(作者:)

本文导读:中上传文件的简单方法是使用fileupload上传控件,该控件让用户更容易

地浏览和选择用于上传的文件,它包含一个浏览按钮和用于输入文件名的文本框。只要用户

在文本框中输入了完全限定的文件名,无论是直接输入或通过浏览按钮选择,都可以调用

FileUpload的SaveAs方法保存到磁盘上。

FileUpload控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将

它上载到 Web 服务器。用户通过在控件的文本框中输入本地计算机上文件的完整路径(例

如,C:MyFilestest。txt)来指定要上载的文件。用户也可以通过单击“浏览”按钮,然后在

“选择文件”对话框中定位文件来选择文件。

用户选择要上载的文件后,FileUpload控件不会自动将该文件保存到服务器。您必须显式提

供一个控件或机制,使用户能提交指定的文件。例如,可以提供一个按钮,用户单击它即可

上载文件。为保存指定文件所写的代码应调用SaveAs方法,该方法将文件内容保存到服务

器上的指定路径。通常,在引发回发到服务器的事件的事件处理方法中调用SaveAs方法。

在文件上传的过程中,文件数据作为页面请求的一部分,上传并缓存到服务器的内存中,然

后再写入服务器的物理硬盘中。

FileUpload控件常用的几个公开的只读属性

返回类

名 称

FileContent

FileName

Stream

string

说 明

返回一个指向上传文件的Stream流对象

返回上传文件在客户端的文件名称,不包含路径信息

获取一个布尔值,用于表示FileUpload控件是否已经包含一个

HasFile Boolean

文件

获取一个与上传文件相关的HttpPostedFile对象,使用该对象

PostedFile HttpPostedFile

可以获取上传文件的相关属性。下表列出了它所公开的只读属性

HttpPostedFile属性

名 称 返回类型 说 明

ContentLength

ContentType

FileName

InputStream

integer

string

string

Stream

返回上传文件的按字节表示的文件大小

返回上传文件的MIME内容类型

返回文件在客户端的完全限定名

返回一个指向上传文件的流对象

有三个方面需要注意:

1.确认是否包含文件

在调用SaveAs方法将文件保存到服务器之前,使用HasFile属性来验证FileUpload控件确

实包含文件。若HasFile返回true,则调用SaveAs方法。如果它返回false,则向用户显示

消息,指示控件不包含文件。不要通过检查PostedFile属性来确定要上载的文件是否存在,

因为默认情况下该属性包含 0 字节。因此,即使FileUpload控件为空,PostedFile属性仍

返回一个非空值。

2.文件上传大小限制

默认情况下,上传文件大小限制为 4096 KB (4 MB)。可以通过设置httpRuntime元素的

maxRequestLength属性来允许上载更大的文件。

相关节点如下:

〈>

〈httpRuntimemaxRequestLength="40690" executionTimeout="6000" />

〈/>

maxRequestLength表示可上传文件的最大值,executionTimeout表示关闭前允

许发生的上载秒数。

若要增加整个应用程序所允许的最大文件大小,请设置文件中的

maxRequestLength属性。若要增加指定页所允许的最大文件大小,请设置中

location元素内的maxRequestLength属性。

上载较大文件时,用户也可能接收到以下错误信息:

was recycled because memory consumption exceeded 460 MB (60 percent of available RAM).

以上信息说明,上传文件的大小不能超过服务器内存大小的60%。这里的60%是Web。config

文件的默认配置,是配置节中的memoryLimit属性默认值。虽然可以修改,

但是如果上传文件越大,成功几率越小,不建议使用。

3.上传文件夹的写入权限

应用程序可以通过两种方式获得写访问权限。您可以将要保存上载文件的目录的写访问权限

显式授予运行应用程序所使用的帐户。您也可以提高为 应用程序授予的信任级别。

若要使应用程序获得执行目录的写访问权限,必须将AspNetHostingPermission对象授予应

用程序并将其信任级别设置为值。提高信任级别可

提高应用程序对服务器资源的访问权限。请注意,该方法并不安全,因为如果怀有恶意的用

户控制了应用程序,他(她)也能以更高的信任级别运行应用程序。最好的做法就是在仅具

有运行该应用程序所需的最低特权的用户上下文中运行 应用程序。

可以通过3种方法访问上传文件:

1.通过FileBytes属性。该属性将上传文件数据置于字节数组中,遍历该数组,则能够以字

节方式了解上传文件的内容。

2.通过FileContent属性。调用该属性可以获得一个指向上传文件的Stream对象。可以使用

该属性读取上传文件数据,并使用FileBytes属性显示文件内容。

3.通过PostedFile属性。调用该属性可以获得一个与上传文件相关的HttpPostedFile对象,使

用该对象可以获得与上传文件相关的信息。例如,调用HttpPostedFile对象的ContentLength,

可以获得上传文件大小;调用HttpPostedFile对象ContentType属性,可以获得上传文件的

类型;调用HttpPostedFile对象的FileName属性,可以获得上传文件在客户端的完整路径(调

用FileUpload控件的FileName属性,仅能获得文件名)。

FileUpload控件上传简单实例:

C# 代码 复制

//前台就随便拖一个FileUpload控件和一个button控件


Text="Button" />

//后台

using System;

;

uration;

tions;

;

ty;

;

trols;

ts;

ntrols;

publicpartialclassManage_News_upload :

{

protectedvoidPage_Load(object sender, EventArgs e)

{

}

protectedvoid Button1_Click(object sender, EventArgs e)

{

if (e)

{

stringfileExrensio =

ension(me).ToLower();//ToLower

转化为小写

stringFileType = tType;

stringUploadURL = h("~/upload/");//上传的目录

if (FileType == "image/bmp" || FileType == "image/gif" || FileType ==

"image/jpeg" || FileType == "image/jpg" || FileType == "image/png")//

判断文件类型

{

try

{

if (!(UploadURL))//判断文件夹是否已经存在

{

Directory(UploadURL);//创建文件夹

}

(UploadURL + me);

}

catch

{

Response .Write ("失败");

}

}

else

{

("格式错误");

}

}

else

("请选择文件");

}

}

上面的实例还有很多属性没有用到,大家可以根据需要自己添加属性判断,写出满足自己项

目的上传方法.

一次上传多个文件

要一次上传多个文件,我们可以像传单个文件那样对每个文件单独进行处理,除此之外,我

们还可以使用HttpFileCollection类捕获从Request对象发送来的所有文件,然后再单独对每

个文件进行处理.

实例

C# 代码 复制

protectedvoid Button1_Click(object sender, EventArgs e)

{

stringfilepath = h("upload") + "";

HttpFileCollectionuploadFiles = ;

for (int i = 0; i 〈; i++)

{

HttpPostedFilepostedFile = uploadFiles[i];

try

{

if (tLength>0)

{

+= "文件 #" + (i + 1) + ":" +

eName(me) + "〈br/>";

(filepath +

eName(me));

}

}

catch (Exception Ex)

{

+= "发生错误: " +e;

}

}

}