首页 新闻 会员 周边 捐助

扑捉上传文件大小异常

0
悬赏园豆:10 [待解决问题]

在.net中默认上传文件大小是4m,现在我想当它上传的文件大小超过4m时给用户一个友好界面,我试了几次好像多不行啊,捕捉不到异常,我使过用这种方法

//private void Application_BeginRequest(Object source, EventArgs e)
    //{
    //    HttpRequest request = HttpContext.Current.Request;
    //    if (request.ContentLength > 40690)
    //    {
    //        HttpApplication app = source as HttpApplication;
    //        HttpContext   context   =  app.Context;
    //        HttpWorkerRequest wr =
    //        (HttpWorkerRequest)(context.GetType().GetProperty("WorkerRequest ", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(context,null));
            byte[] buffer;
  if (wr.HasEntityBody())
           {
   int contentlen = Convert.ToInt32(wr.GetKnownRequestHeader(
                    HttpWorkerRequest.HeaderContentLength));

                buffer = wr.GetPreloadedEntityBody();
  int received = buffer.Length;
                int totalrecv = received;
              if (!wr.IsEntireEntityBodyIsPreloaded())
            {
                  buffer = new byte[65535]; 
               while((contentlen- totalrecv)>=received)
                  {
   received   = wr.ReadEntityBody(buffer, 
                    buffer.Length); 
                      totalrecv   +=   received; 
                        received   = 
                       wr.ReadEntityBody(buffer,   contentlen   -   totalrecv);

              }
 
             }

         }
           context.Response.Redirect( "../Default.aspx ");
   }
        
         
  }

这段代码写在Global.asax文件里面,这里我不太明白 (HttpWorkerRequest)(context.GetType().GetProperty("WorkerRequest ", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(context,null));这段代码中“WorkerRequest”这个参数的含义,希望那个大家帮帮忙,或者提供更好的办法!!!!!!!!

叶枫月圆的主页 叶枫月圆 | 初学一级 | 园豆:190
提问于:2010-12-04 13:11
< >
分享
所有回答(2)
0

没遇到过这样的问题

aXinNo1 | 园豆:570 (小虾三级) | 2010-12-04 14:47
0

相当于HttpWorkerRequest wr = Context.WorkerRequest。WorkerRequest 是个私有变量,只能通过反射获取。这样是不使用客户端控件的情况下,最好的处理方法(客户端可以有flash,firefox中的file对象)。另外虽然可以通过Web.config调整上存文件的大小,但是这样并不能显示友好界面。因为文件一旦超出设定大小,IIS就会拒绝,出现拒绝服务的界面,从而不能热direct到想要的页面。

沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-04 15:32
那WorkerRequest 是从哪里获取来的啊,有什么具体的实现方法吗
支持(0) 反对(0) 叶枫月圆 | 园豆:190 (初学一级) | 2010-12-05 22:26
因为workerRequest是Context一个私有属性,所以只能用反射获得,而不能直接获取。
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-05 22:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册