设置上传文件大小

 

在上传文件时,我们可以在web.config里设置允许上传的文件大小。但是,当上传的文件超过设置的限制时,在Application_Error事件里是无法捕捉到这个异常的。下面,就是捕捉上传文件超过设置大小的方法:
首先,在web.config里设置允许一次上传的文件的总大小;

Web.config 文件
< httpRuntime  maxRequestLength ="400"  executionTimeout ="3600"  appRequestQueueLimit ="10000" />

 其次,在Global里加入如下的代码:

C# 代码
<% @ Application Language = " C# "   %>
<% @ Import Namespace = " System.Web.Configuration "   %>

< script RunAt = " server " >
  
protected   void  Application_BeginRequest( object  sender, EventArgs e)
  {

    
// 本代码的功能是检查页面请求的大小,如果超过了配置文件maxRequestLength的设定值,就提示用户超过了所允许的文件大小。
    
    
    
// 从配置文件里得到配置的允许上传的文件大小
    HttpRuntimeSection runTime  =  (HttpRuntimeSection)WebConfigurationManager.GetSection( " system.web/httpRuntime " );

    
// maxRequestLength 为整个页面的大小,不仅仅是上传文件的大小,所以扣除 100KB 的大小,
    
// maxRequestLength单位为KB
     int  maxRequestLength  =  (runTime.MaxRequestLength  -   100 *   1024 ;

    
// 当前请求上下文的HttpApplication实例
    HttpContext context  =  ((HttpApplication)sender).Context;
    
    
// 判断请求的内容长度是否超过了设置的字节数
     if  (context.Request.ContentLength  >  maxRequestLength)
    {
      
// 得到服务对象
      IServiceProvider provider  =  (IServiceProvider)context;
      HttpWorkerRequest workerRequest 
=  (HttpWorkerRequest)provider.GetService( typeof (HttpWorkerRequest));

      
// 检查请求是否包含正文数据
       if  (workerRequest.HasEntityBody())
      {        
        
// 请求正文数据的长度
         int  requestLength  =  workerRequest.GetTotalEntityBodyLength();
        
// 得到加载的初始字节数
         int  initialBytes  =   0 ;
        
if  (workerRequest.GetPreloadedEntityBody()  !=   null )
          initialBytes 
=  workerRequest.GetPreloadedEntityBody().Length;
        
        
// 检查是否所有请求数据可用
         if  ( ! workerRequest.IsEntireEntityBodyIsPreloaded())
        {
          
byte [] buffer  =   new   byte [ 512000 ]; 
          
// 设置要接收的字节数为初始字节数
           int  receivedBytes  =  initialBytes;
          
// 读取数据,并把所有读取的字节数加起来,判断总的大小
           while  (requestLength  -  receivedBytes  >=  initialBytes)
          {
            
// 读取下一块字节
            initialBytes  =  workerRequest.ReadEntityBody(buffer, buffer.Length);
            
// 更新接收到的字节数
            receivedBytes  +=  initialBytes;
          }
          initialBytes 
=  workerRequest.ReadEntityBody(buffer, requestLength  -  receivedBytes);
        }
      }
      
// 请求重定向到上载页面,并给用户提示信息。
      context.Response.Redirect( this .Request.Url.LocalPath  +   " ?error= "   +  Server.UrlEncode( " 您上传的文件超过了允许的大小。 " ));
    }

  }
</ script >

最后,上传的页面设置如下:

ASPX 代码
<% @ Page Language = " C# "   %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< script  runat ="server" >
  protected 
void  Button1_Click(object sender, EventArgs e)
  {
    FileUpload1.SaveAs(Server.MapPath(
" ~ " +   " \\ "   +  System.IO.Path.GetFileName(FileUpload1.FileName));
    err.Text 
=   "" ;
  }

  protected 
void  Page_Load(object sender, EventArgs e)
  {
    
if  ( ! String.IsNullOrEmpty(Request.QueryString[ " error " ]))
    {
      err.Text 
=  Server.HtmlEncode(Request.QueryString[ " error " ]);
    }
  }
</ script >

< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
  
< title ></ title >
</ head >
< body >
  
< form  id ="form1"  runat ="server"  action ="?" >
  
< asp:FileUpload  ID ="FileUpload1"  runat ="server"   />
  
< asp:Button  ID ="Button1"  runat ="server"  OnClick ="Button1_Click"  Text ="上载"   />
  
< div >< asp:Label  ID ="err"  runat ="server"  ForeColor ="Red" ></ asp:Label ></ div >
  
</ form >
</ body >
</ html >
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值