日期:2014-05-17  浏览次数:20397 次

上传文件大小限制的问题
我想上传大于4M的文件 已经修改了配置文件的<httpruntime executiontimeout="300" maxrequestlength="40960"  
usefullyqualifiedredirecturl="false"/>  
可是没其作用,而且我把maxrequestlength的值设置为1的时候 还是可以传下于4M的文件,换句话说这个值就没其作用
然后网上给出了一段代码iserviceprovider provider = (iserviceprovider) httpcontext.current;  
  httpworkerrequest wr = (httpworkerrequest) provider.getservice(typeof(httpworkerrequest)); 
  byte[] bs = wr.getpreloadedentitybody(); 
  .... 
  if (!wr.isentireentitybodyispreloaded()) 
  { 
  int n = 1024; 
  byte[] bs2 = new byte[n]; 
  while (wr.readentitybody(bs2,n) >0) 
  { 
  ..... 
  } 
  } 
我不懂这是什么意思,也不知道该怎样用.....在下真心是个asp.net 新手还往各位有爱心人士指点一二,最好是能给出个实例

------解决方案--------------------
貌似是asp.net本质论里面的一段代码 接管了application里面post过来的数据 然后还要模拟这些数据继续往之后的application往下传 蛮长一段代码没仔细看估计也得看半天 如果你真是新手的话这些东西还是等用熟了再看 坦率说有些东西是得要一定积累才能看懂的
------解决方案--------------------
在下也水平有限~~~怕解释不清楚误人子弟~
探讨

引用:
貌似是asp.net本质论里面的一段代码 接管了application里面post过来的数据 然后还要模拟这些数据继续往之后的application往下传 蛮长一段代码没仔细看估计也得看半天 如果你真是新手的话这些东西还是等用熟了再看 坦率说有些东西是得要一定积累才能看懂的

额 真心看不懂,您能讲解下?或者解决我提出来的 问题么?

------解决方案--------------------
超大文件还是用第三方控件吧。传统HTML方式上传会有很多问题。
------解决方案--------------------
这段代码的作用,我的理解,主要是为了防止上传文件大小超出config里的限制时,ie出现文件找不到的错误页面。
基本的思路就是,如果上传文件大小超过限制,已经上传的字节必须都读进来,然后扔掉。满足if (!wr.isentireentitybodyispreloaded())
条件的就是上传文件大小超过限制的情况,while (wr.readentitybody(bs2,n) >0)
循环里就是把上传的字节都读到bs2里,却不用,这样可以避免ie报错,但是iis已经产生了exception,所以还必须在global.asax.cs里的application_error里再捕获一下exception,清除掉以后,就可以转到用户定义的友好的出错页面去了。

参考我回的这个帖子:

asp.net中c# 怎么做当上传打文件时提示上传文件太大不能上次
------解决方案--------------------
修改maxrequestlength大于4m,难道还是会抛异常?
------解决方案--------------------
看看这个连接,有可能需要在iis里设置:

http://www.banmanpro.com/support2/File_Upload_limits.asp