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

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

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

<%@ Page Language="VB"%>
<script runat="server">
   Protected Sub
   Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        If FileUpload1.HasFile Then
            Try
                FileUpload1.SaveAs("C:\Uploads\" & _
                   FileUpload1.FileName)
                Label1.Text = "File name: " & _
                   FileUpload1.PostedFile.FileName & "<br>" & _
                   "File Size: " & _
                   FileUpload1.PostedFile.ContentLength & " kb<br>" & _
                   "Content type: " & _
                   FileUpload1.PostedFile.ContentType
            Catch ex As Exception
                Label1.Text = "ERROR: " & ex.Message.ToString()
            End Try
        Else
            Label1.Text = "You have not specified a file."
        End If
   End Sub

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>FileUpload Server Control</title>
</head>
<body>
    <form id="form1" runat="server">

        <asp:FileUpload ID="FileUpload1" runat="server" />
        <p>
        <asp:Button ID="Button1" runat="server" Text="Upload"
         OnClick="Button1_Click" /></p>
        <p>
        <asp:Label ID="Label1" runat="server"></asp:Label></p>

    </form>
</body>
</html>



C#

<%@ Page Language="C#"%>
<script runat="server">
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
           try {
              FileUpload1.SaveAs("C:\\Uploads\\" + FileUpload1.FileName);
              Label1.Text = "File name: " +
                   FileUpload1.PostedFile.FileName + "<br>" +
                   FileUpload1.PostedFile.ContentLength + " kb<br>" +
                   "Content type: " +
                   FileUpload1.PostedFile.ContentType;
           }
            catch (Exception ex) {
              Label1.Text = "ERROR: " + ex.Message.ToString();
            }
        else
        {
           Label1.Text = "You have not specified a file.";
        }
    }

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

<body>
    <form name="form1" method="post" action="FileUpload.aspx" id="form1"
     enctype="multipart/form-data">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
 value="/wEPDwUKMTI3ODM5MzQ0Mg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm
 0tZGF0YWRkrSpgAFaEKed5+5/8+zKglFfVLCE=" />
</div>
   <input type="file" name="FileUpload1" id="FileUpload1" />
   <p>

   <input type="submit" name="Button1" value="Upload" id="Button1" /></p>
   <p>
   <span id="Label1"></span></p>

<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION"
 value="/wEWAgL1wLWICAKM54rGBqfR8MhZIDWVowox+TUvybG5Xj0y" />

</div></form>
</body>
</html>

首先要注意的是由于在asp.net2.0中, enctype 已经成为<form>中的一个属性,而FileUpload出现在页面中我们还可以看到FileUpload control已经转换成了Html中的<input type=”File”>元素
当文件通过在文件中的button1_click事件处理上传后,我们要做的第一个检测就是这文件是否真正的替换成了<input type=”file” >,如果这个文件是指定的,我们可以尝到试使用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这个配置文件里,找到<httpRuntime>这个世点。在这个文件里我们可以看到服务器端允许的最大值是4096KB。如下列显示

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值