利用.NET的File控件上传文件的最终解决方案

上传大文件,有好几种方法:

1、思归的 HttpWorkerRequest 方法,太难,看不懂:-(
2
、利用第三方的控件  AspNetUpload  要钱!!算了,咱还是喜欢免费的。
3
、修改 web.config 文件,但是不能捕获错误。
4
、通过 ftp 的方式上传。服务器需要提供 ftp 服务。

只有第三种方式合适!

修改 Webcong 文件:
<system.web>
<httpRuntime maxRequestLength="40690"
         useFullyQualifiedRedirectUrl="true"
         executionTimeout="6000"
         useFullyQualifiedRedirectUrl="false"
     minFreeThreads="8"
     minLocalRequestFreeThreads="4"
      appRequestQueueLimit="100"
      enableVersionHeader="true"
         />
</system.web>

其中与上传有密切关系的是:
maxRequestLength
  
指示  ASP.NET  支持的最大文件上载大小。
  
该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。
  
指定的大小以  KB  为单位。
  
默认值为  4096 KB (4 MB)

executionTimeout
  
指示在被  ASP.NET  自动关闭前,允许执行请求的最大秒数。
  
单位为秒,在上传大的文件时把这个设的大一些。


如果服务器内存 512M ,已可上传大小 160M  的文件。

到这里 web.config 的设置就已经结束。
可是一旦上传文件的大小超过了这个设置的文件大小范围就会发生如下错误:

该页无法显示
您要查看的页当前不可用。网站可能遇到技术问题,或者您需要调整浏览器设置。

虽然解决不了,那也要捕获这个错误啊!怎么办呢?

由于这个错误是由 file 控件引发的前台错误,所以在后台想利用 try...catch 来捕获是行不通的。
于是想到了利用.NET 的错误捕获页面的机制来处理。可行哦。

1、先设置 web.config
  <customErrors mode="On"/>
2
、新建一个 error.aspx  文件,专门用来捕获错误的。
3
、在上传文件的 aspx 页面的前台页面里添加 page 指令。ErrorPage="UploadError.aspx"
4
、在 error.aspx 中添加一些代码来判断错误信息是否是 file 引起的前台错误。
   public class UploadError : System.Web.UI.Page
   {
    private void Page_Load(object sender, System.EventArgs e)
    {
     Exception ex = Server.GetLastError();
     if (ex != null)
     {
      Response.Redirect("../error.aspx");
     }
     else //
前台错误 ex 为空值
     {  
      Response.Redirect("uploadExcel.aspx?err=1"); //
重新跳转到上传页面,加上 err 参数是为了显示错误信息
     }
    }
   
5
、显示错误提示。
   public class uploadexcel : System.Web.UI.Page
   {
    private void Page_Load(object sender, System.EventArgs e)
    {
     if (Request["err"] == "1")
     {
     Page.RegisterStartupScript("budget","<script language = javascript>alert('Upload file has failed ! File size is too large !')</script>");
     }
    }
   }
  
6
、搞定收工。

经过上述修改,现在的上传变成了,程序指定文件大小,如果超过,则弹出错误提示。

控件共享群    40662788 (满)
控件共享群1   45939285  (满)
控件共享群2   45939346
控件共享群3   45939415

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值