[译]ASP.Net2.0学习之FileUpload上传控件

Url: http://www.codeguru.com/csharp/sample_chapter/article.php/
Author: Bill Evjen
翻译:德仔工作室

教程下载:
点击这里下载全文章教程

在ASP。NET 1。0/1/1中,如果要上传文件夹一般都要用到HTML控件中的FileUpload 控件,这个控件需要将元素放到你的web页面中,这样才可以使用户将文件传至服务器端.如果这样的话,你就要在很多的文件夹中进行一系列的修改,比如说你要在你的
里加上 entype=”multipart/form-date”.
在ASP.Net 2.0中介绍了一种新的上传的服务器控件可以使上传文件的过程变得更加简单.当一个页面需要上传文件时,你只要使用用Fileupload Control上传文件
当你将文件上传到服务器端后,你还可以通过一些代码获取上传文件夹的信息并选择是否将其显示出来.Listing1就是一个使用FileUpload Control进行上传文件的例子,这个页面包括一个简单的FileUpload control ,一个Button 还有一个 Label control
Listing 1: Uploading files using the new FileUpload control
VB

<%@ Page Language="VB"%>

http://www.w3.org/1999/xhtml" >

    FileUpload Server Control


    

        
        


                 OnClick="Button1_Click" />


        


        



    





C#

<%@ Page Language="C#"%>

通过这相例子你可以看到整个过程非常简单.g一个Button就将整个上传过程实现了,而FileUpload Control自身并没有将上传的过程表现出来,你必须通过一个Button_click事件将其实现. 当你编译并运行这个页面时,你可以注意到在这个页面里会生成一些代码.下面就是我们所能看到的这个文件的源代码
http://www.w3.org/1999/xhtml" >
<br/>      FileUpload Server Control<br/>


    
     enctype="multipart/form-data">

value="/wEPDwUKMTI3ODM5MzQ0Mg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm
0tZGF0YWRkrSpgAFaEKed5+5/8+zKglFfVLCE=" />

  
  



  


  


  




value="/wEWAgL1wLWICAKM54rGBqfR8MhZIDWVowox+TUvybG5Xj0y" />





首先要注意的是由于在asp.net2.0中, enctype 已经成为
中的一个属性,而FileUpload出现在页面中我们还可以看到FileUpload control已经转换成了Html中的元素
当文件通过在文件中的button1_click事件处理上传后,我们要做的第一个检测就是这文件是否真正的替换成了,如果这个文件是指定的,我们可以尝到试使用FileUpload的一个方去SaveAs来指定这个方法带有一个string 的参数,这个参数是用来设定上传文件的路径和文件名个例子就是通过SaveAs的方法,设置参数为C:\Uploads\UploadedFile.txt,我们可以看到这文件上传到服务器端后,其路径正如我们所设置的一样.
PostedFile.FileName属性是将上传到服务器端的文件的文件名设置成与你在客户端一样的名字,如果我想命名为别的文件名,你可以使用SaveAs()这个方法来实现,如下所示
FileUpload1.SaveAs("C:\Uploads\UploadedFile.txt")
我也可以指定一个时间戳作为上传文件的命名,如下所示:
FileUpload1.SaveAs("C:\Uploads\" &
   System.DateTime.Now.ToFileTimeUtc() & ".txt")
当上传成功后,Label控件就会在页面中显示出上传文件的大小和上传的文件路径和类型号.在这个实例中,文件名,文件的大小,还有类型都通过页面炅示给客户端的用户,当文件上传到服务器羰后,就会生成跟下面这个相似的页面.




Figure 1

上传文件至另一服务器不可避免会产生一些错误事务,在文件上传过程中使用异常处理是很理要的,这就是为什么要在例子中使用try…catch为捕捉异常事务的原因了.

为asp.net上传文件设置合适的权限

在你的应用程序员中,当客户羰用户通过使用FileUpload control来上传一些文件到服务器端时,你可能会接收到一些错误信息.这些错误信息可能是由于在服务器羰所批定的文件夹,由asp.net所创建的用户没有权力进行写入操作.如果asp.net不能如你所愿,你可以设置这个文件夹的相关属性.
首先,右键单击asp.net上传的文件夹 ,当对话框出现后,选择安全这个选择卡,检查一下所列出的组里或用户里是否包含民asp.net的用户,同时检查站一下所对应的asp.net用户是否能对这个文件夹有写入操作的权限.如果正确的话,你右以看到跟下面设置相似的界面.




如果你没有看到你的asp.net账户在这个文件夹的用户组和用户的列表中,你就需要通赤点击“新增”按钮来增加你对应 的用户了,如下图:


Figure 3
点击OK后,赋予相关的操作权限就可以正常使用了.

理解上传文件的大小限制


当然,也许在你的应用程序中,客户端的用户在上传文件到程中不会碰到这个问题,但你必须意识到这个限制的丰硕。当用户进行文件上传工作时,在服务器端确定存在一个文件大小的制约。这个默认的限制是4MB(4096KB),当用户试图上传一个超过4096KB的文件到服务器端时,就会有错误产生.这样的文件大小限制实际可是保护你的应用程序,这样你可以阻止一些恶意的用户上传一些超大的文件占用服务器资源,造成服务器拒绝式攻击,使正常使用的用户不能正常不能得到服务器端的响应.当然,你也可以根据自己的要求对相关的设置进行调整,为了能调整至可上传文件的大小,你可以在web.config文件(asp.net2.0的路径C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG)或在你的应用程序里面的web.config里进行相关设置


在web.config这个配置文件里,找到这个世点。在这个文件里我们可以看到服务器端允许的最大值是4096KB。如下列显示

Listing 2: Changing the file-size limitation setting in the web.config file
executionTimeout="110"
maxRequestLength="4096"
requestLengthDiskThreshold="80"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="5000"
enableKernelOutputCache="true"
enableVersionHeader="true"
requireRootedSaveAsPath="true"
enable="true"
shutdownTimeout="90"
delayNotificationTimeout="5"
waitChangeNotification="0"
maxWaitChangeNotification="0"
enableHeaderChecking="true"
sendCacheControlHeader="true"
apartmentThreading="false" />
你可以在web.config里的节点设计很多属性,但是最有意思的是maxRequestLength和executionTimeout这两个属性.The maxRequestLength 属性是对web服务器所能接受文件大小的最大值. 当你上传文件夹时,这个文件就必须要符合这个要求,通过改变这个属性的值来符合你的要求,这个属性的默认值是4MB,你可以按照这样的格式maxRequestLength="11000"进行对其值进行设定.
这个例子通过设置maxRequestLength的属性值为11000KB(将近10MB),用户就可以上传10MB的文件至服务器。要注意的时,当改变了maxRequestLenth的属性值后,另一个属性executionTimeout也应该做相应的调整. executionTomeout属性是对asp.net发送一个请求至服务器端后,服务器端(不管是否完成)响应的时间,其默认值为90秒.如果响应的时间超过所设定的值,客户端的用户就会接受到一个超时的错误.如果你允许客户拥有更多需求,就应该对executionTimout进行相对应的设置。一般来说,如果maxRequestLength的属性值增加的话,那么executionTimeout也应该作相对应的增加.在正常情况下,如果文件可以在小文件情况下运用,减小maxRequestLength的属性值是个不错的选择,这样可以使你的应用程序受到”拒绝服务“的攻击机会大大减少.


Flash动画


[本日志由 admin 于 2006-09-24 02:59 PM 编辑]
上一篇: BBS签名(2)
下一篇: 在岁月中沧桑
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 1 | 引用: 374 | 查看次数: 41395
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 30 字 | UBB代码 关闭 | [img]标签 关闭