posts - 1, comments - 14, trackbacks - 0, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

最新评论

不错.
不错,收藏了
为什么我的request.ContentLength 永元都是0
呃……谢谢楼主……
但,我是这么做的:
Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
Dim request As HttpRequest = HttpContext.Current.Request
If request.ContentLength > 1024000 Then
HttpContext.Current.Response.Redirect("/max.html")
End If
End Sub

检查Request的content length超过限制后便直接redirect到提示错误的页面……

反复测试都没有发现任何不良效果……服务端绝对不会等待浏览器把所有的数据都上传完……在Firefox / Opear / IE7 / Safari上面用户都会立刻看到错误的提示页面……

唯一的例外是IE6,该死的IE6还是好等上那么十几秒才能看到转跳页面…………完全不知何故…………

如果是要从防止服务器被攻击的角度考虑,倒是可以直接:
wr.CloseConnection()

所有浏览器都会立刻看到默认的错误页面……尝试在picasa上上传一个600M的假图片便是如此……
re: 大文件上传之异常处理(原创) 孙明明 2006-03-22 14:07  
你是干什么的啊
re: [转帖]名字最骗人的十所大学 劲舞团 2006-02-26 09:07  
不错。。。收藏了。。。。
re: 大文件上传之异常处理(原创) Edwin Liu 2005-11-29 09:45  
HttpApplication app = sender as HttpApplication;
HttpWorkerRequest wr = GetWorkerRequest(app.Context);
有启发
我按照你说的方法试过,不行啊
还有,你的代码似乎也有点问题,因为wr.CloseConnection();在throw new Exception();后面,所以永远不会执行。
你确定是Context的长度大于maxRequestLength的时候才执行throw new Exception();的吗?
re: 大文件上传之异常处理(原创) 垃圾猪 2005-11-28 13:05  
我说的这种方法是不出错的,你可以试一下
使用HttpWorkerRequest wr = ...........
然后抛出异常,再中断与客户的连接...
throw new Exception("文件太大了");
wr.CloseConnection();
仍然是需要把客户端数据读完之后才能Redirect
其实还是内置的抛出HttpException的方法最好(没有完全读取客户端数据就结束了当前Request,可以防止攻击),不过当用户有要求的时候也没办法。
呵呵,小猪,你说的方法我试过,但是发现行不通。
while ( contentlen - totalrecv >= received)
      {
       received =
        wr.ReadEntityBody(buffer,
        buffer.Length);
       totalrecv += received;
      }
      received =
       wr.ReadEntityBody(buffer, contentlen - totalrecv);
上面这段代码的目的就是使Context的长度小于maxRequestLength,这个步骤是必须的。
如你说的监测到内容过长直接抛出异常,这时候内容还是大于maxRequestLength,系统仍然会崩溃。
谢谢你的建议,我们可以继续讨论。
re: 大文件上传之异常处理(原创) 垃圾猪 2005-11-28 10:59  
反正是视为无效文件
感觉到HttpWorkerRequest 开始工作时检测到内容过长直接抛出异常比较好
因为再执行下去也没必要了!
re: 大文件上传之异常处理(原创) jeseeqing 2005-11-28 10:35  
你终于还是过来注册了。

以后这里就是你的家了