CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

探讨一下上传控件的上载文件大小限制的问题

楼主truelove12(结贴者寥寥无几,心寒ing...)2005-09-16 12:32:17 在 .NET技术 / ASP.NET 提问

在页面中用了一个  
  <form   id="Form1"   method="post"   encType="multipart/form-data"   runat="server">  
  <input   type="file"   runat="server"   />  
  <asp:button   id="button1"   runat="server"   />  
  </form>  
   
  当你上传一个文件,它的体积超过  
   
  web.config中的maxRequestLength值,程序会报dns错误.无法显示该页.  
   
  我们就想通过判断PostedFile.ContentLength的值来确定它是否在我们允许的范围内,但是只要你上传的文件超过maxRequestLength值时,PostedFile.ContentLength还来不及判断,程序就已经报错了.  
   
  我想过很多方法,包括自定义验证控件,以及通过客户端脚本vbscript或javascript,来验证,好像都没有找到没有好的解决方案.不知道CSDN的高手,有没有什么好的方法.望赐教.  
  问题点数:20、回复次数:39Top

1 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-16 12:33:38 得分 0

vbcrlfTop

2 楼ChengKing((.net: http://blog.csdn.net/ChengKing ))回复于 2005-09-16 13:08:49 得分 0

<system.web>  
  <httpRuntime   executionTimeout="600"   maxRequestLength="51200"   useFullyQualifiedRedirectUrl="false"   minFreeThreads="8"   minLocalRequestFreeThreads="4"   appRequestQueueLimit="100"   enableVersionHeader="true"/>  
  </system.web>  
  Top

3 楼net_lover(【孟子E章】)回复于 2005-09-16 13:10:41 得分 0

在保存文件时,您应该确保指定文件的完整路径(例如,"C:\MyFiles\Picture.jpg"),并确保为   ASP.NET   使用的帐户提供要存储文件的目录的写权限。上载大文件时,可使用   元素的   maxRequestLength   属性来增加文件大小的最大允许值,例如:  
   
  <configuration>  
        <system.web>  
        <httpRuntime   maxRequestLength="1048576"   executionTimeout="3600"   />  
        </system.web>  
  </configuration>  
   
  其中:maxRequestLength:指示   ASP.NET   支持的HTTP方式上载的最大字节数。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以   KB   为单位。默认值为   4096   KB   (4   MB)。executionTimeout:指示在被   ASP.NET   自动关闭前,允许执行请求的最大秒数。在当文件超出指定的大小时,如果浏览器中会产生   DNS   错误或者出现服务不可得到的情况,也请修改以上的配置,把配置数加大。  
   
  另外,上载大文件时,还可能会收到以下错误信息:  
   
  aspnet_wp.exe   (PID:   1520)   被回收,因为内存消耗超过了   460   MB(可用   RAM   的百分之   60)。  
   
  如果遇到此错误信息,请增加应用程序的   Web.config   文件的   元素中   memoryLimit   属性的值。例如:  
   
  <configuration>  
        <system.web>  
              <processModel   memoryLimit="80"/>  
        </system.web>  
  </configuration>  
   
  Top

4 楼net_lover(【孟子E章】)回复于 2005-09-16 13:12:47 得分 0

2003系统还需要修改System32\Metabase.xml文件Top

5 楼net_lover(【孟子E章】)回复于 2005-09-16 13:13:21 得分 0

2003系统还需要修改System32\Metabase.xml文件Top

6 楼hchxxzx(NET?摸到一点门槛)回复于 2005-09-16 13:15:48 得分 0

你不能使用webconfig里面的上限值来限制所能上传的最大文件值。这个判断应将它放在代码里面。  
  假设你把maxRequestLength值设置大一点比如1000M(不过这个最大值是跟你服务器的内存有关系的),然后在代码里面,根据情况的不同,比如当超过300M的时候,弹出提示。  
  Top

7 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-16 13:25:22 得分 0

感谢几位高手的答复,非常感谢.  
  不过,好像几位高手没有仔细看清楚我的问题.  
  我的web.config配置  
  <httpRuntime   maxRequestLength="1024"   executionTimeout="45"   />  
   
  我的意思是.如果想判断  
  sub   button_click()  
  if   cint(file1.PostedFile.ContentLength)   >1024*1024   then  
  registerclientscriptblock("error","<script>不写了</script>"  
  end   if  
  end   sub  
   
  实际上,如果你上载一个大于1024KB的话,程序就直接报无法显示的错误了,上面的按钮事件根本不起作用.  
  Top

8 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-16 13:27:26 得分 0

希望大家继续关注,上网google了一下,也找不到什么好的解决方法.  
  我想过用vbscript以及javascript只是无奈这两种都不是太精通.  
  vbscript好像没有判断上传文件大小的方法Top

9 楼dbserver(寻找完美的自我)回复于 2005-09-16 13:54:03 得分 0

后台代码能查看到文件大小!  
   
   
  ---------------  
  欢迊来到麦高网-私活兼职首选平台   www.mgao.net  
  Top

10 楼apcsherry(无敌神勇小超人)回复于 2005-09-16 13:55:37 得分 0

<system.web>  
  <httpRuntime   executionTimeout="600"   maxRequestLength="51200"   useFullyQualifiedRedirectUrl="false"   minFreeThreads="8"   minLocalRequestFreeThreads="4"   appRequestQueueLimit="100"   enableVersionHeader="true"/>  
  </system.web>  
  Top

11 楼fox7805034(肚子饿了)回复于 2005-09-16 14:07:23 得分 0

我补充句...用.net自带的上传组件不能超过单个文件200mTop

12 楼smile9961(good life)回复于 2005-09-16 14:07:45 得分 0

ContentLength   可以的啊,我用下面的代碼:  
   
  Dim   Xsize   As   Integer   =   File1.PostedFile.ContentLength   /   1024   /   1024  
                          If   Xsize   >   2   Then   '不可以超過2M  
                                  Response.Write("<script>alert('error');</script>")  
                                  Return  
                          End   IfTop

13 楼smile9961(good life)回复于 2005-09-16 14:20:25 得分 0

不好意思,說錯了,因爲我的文件小於默認值4M,所以沒有報錯.但大於4M就顯示DSN錯誤.  
  Top

14 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-16 22:18:01 得分 0

smile9961  
  看到你的第一篇时,我就想说了,没有想到,你很快就反应过来了.  
   
  无论你怎么判断,但实际上你故意上传一个大于配置文件中的限制大小的文件时,肯定报dns错误.  
  且application_error也捕捉不到.  
   
  apcsherry  
  这位朋友把maxRequestLength设置得太大,毫无意义可言.  
   
  maxRequestLength,指示   ASP.NET   支持的最大文件上载大小。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以   KB   为单位。默认值为   4096   KB   (4   MB)。  
   
  把这个值设得超大,还是有可能导致拒绝服务攻击!  
   
  请继续关注!谢谢各位.Top

15 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2005-09-16 22:45:12 得分 0

web.config是最先执行的。  
   
  你只能想办法在客户端判断文件的体积了。  
   
  Top

16 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-17 09:00:56 得分 0

问题就是如何用javascript来和vbscript来判断。Top

17 楼luxuehong()回复于 2005-09-17 09:14:56 得分 0

UPTop

18 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2005-09-17 10:59:17 得分 10

终于找到方法了:  
   
  document.all.imgID.fileSize   单位是字节。  
  用这个就可以了。我已经测试通过了。IE6.0  
   
  window.setTimeout(showpic1,800);  
  用这个的原因是,图片加载到image后,需要过一点点时间后,才能取到当前图片的信息,否则得到的可能是上一个图片的信息。  
   
  <HTML>  
  <HEAD>  
  <title>上传文件测试</title>  
  <meta   name="GENERATOR"   Content="Microsoft   Visual   Studio   .NET   7.1">  
  <meta   name="CODE_LANGUAGE"   Content="C#">  
  <meta   name="vs_defaultClientScript"   content="JavaScript">  
  <meta   name="vs_targetSchema"   content="http://schemas.microsoft.com/intellisense/ie5">  
  <script   language=javascript>  
  function   showpic1()  
  {  
  var   img   =   document.getElementById("img_upload");  
  var   lbl   =   document.getElementById("lbl_title");  
  lbl.innerText   =   "宽度:"   +img.width   +   "高度:"   +   img.height   +   "。size:"   +   img.fileSize   +   "B";  
  }  
  function   showpic(me)  
  {  
  //alert(me.value);  
  var   img   =   document.getElementById("img_upload");  
  var   lbl   =   document.getElementById("lbl_title");  
  img.src   =   me.value;  
  lbl.innerText   =   "请稍候......";  
  window.setTimeout(showpic1,800);  
   
  }  
   
   
  </script>  
  </HEAD>  
  <body   MS_POSITIONING="GridLayout">  
  <form   id="Form1"   method="post"   runat="server">  
  <TABLE   id="Table1"   style="Z-INDEX:   101;   LEFT:   8px;   POSITION:   absolute;   TOP:   8px"   cellSpacing="1"  
  cellPadding="1"   width="300"   border="1">  
  <TR>  
  <TD></TD>  
  <TD><div   id="lbl_title"></div></TD>  
  <TD></TD>  
  </TR><TR>  
  <TD></TD>  
  <TD><IMG   id="img_upload"   alt=""   src=""></TD>  
  <TD></TD>  
  </TR>  
  <TR>  
  <TD></TD>  
  <TD><INPUT   id="file_upload"   type="file"   onchange="showpic(this)"></TD>  
  <TD></TD>  
  </TR>  
   
  </TABLE>  
  </form>  
  </body>  
  </HTML>Top

19 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-17 11:14:11 得分 0

非常感谢   jyk(喜欢编程。和气生财。共同提高。共同进步)   的回复.  
   
  您的代码,我已经测试过了,很好用.  
   
  但是我的宗旨还是没有实现.  
   
  我的本意是:如果客户端上载了一个超过web.config中的设置的最大时,程序是会报dns错误的.  
  我要解决的就是无论客户端上载多大的文件,程序都不应该报dns错误.  
   
  而application_error是捕捉不到这种错误的.  
   
  如果仅用javascript做客户端的判断的话,有一个问题就是客户端可以绕过脚本验证.  
   
  我的想法是,页面上放一个自定义的验证控件,通过javascript返回一个args.isvalid=false  
  传递给自定义的验证控件,重而让page.isvalid=false,页不报dns错误.  
   
  能不能再麻烦你改写一下如果客户端上载的文件大于某值时,执行一个alert("")  
  非常感谢.Top

20 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-17 11:16:47 得分 0

请大家继续关注一下.谢谢Top

21 楼smile9961(good life)回复于 2005-09-17 11:57:55 得分 0

...defaultRedirect="errorpage.htm"   也不行,继续关注!Top

22 楼ivee(ivee)回复于 2005-09-17 12:08:31 得分 0

MS的网站上有一句话:“...您无法显示自定义错误。”,这个“无法”是不是就是“不可能”的意思??  
   
  不过有个MVP的BLOG,你可以参考一下,不知道有没有用:  
  http://blog.joycode.com/saucer/archive/2004/03/16/16225.aspxTop

23 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-17 12:53:40 得分 0

多谢大家的关注!!非常感谢。希望各位群策群力,找到一个好的解决方法。Top

24 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2005-09-17 16:18:29 得分 0

晕了,已经在客户端得到了文件的体积了,判断一下是否超过了限制就行了。  
   
   
  你说的绕过js的验证而出现的错误的情况,是可以不予考虑的。  
   
  只要在正常情况下,不出错就行了。  
   
  在“做手脚”的情况下出错了也没有办法。  
   
  刚刚在firefox下试了一下,遗憾,没有反应。Top

25 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-17 17:23:18 得分 0

你的程序是可以用的啊.我正在做一些修改.但是现在还是有一点小问题.  
  我不太熟悉javascript,遗憾啊.Top

26 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-17 20:13:38 得分 0

其它朋友还有什么更好的建议吗?Top

27 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-09-28 08:31:49 得分 0

看来这个问题只能依赖2.0能够解决了。Top

28 楼tuzuodong(不放弃我追求)回复于 2005-09-28 09:52:22 得分 0

fox7805034(肚子饿了)     这位兄弟说的,不能超过200MB,我试过也是这种情况,maxrequeslength   你设置得再大,也不会超过200MB,不知还有什么好的方法可以突破呢?不知楼主不否将上传文件保存到本机   ,如果放到服务器上的另一部机上,保存路径及权限该怎样写?Top

29 楼hchxxzx(NET?摸到一点门槛)回复于 2005-10-10 23:41:44 得分 10

可以超过200M  
  所能上传文件的最大限度,跟以下几个方面有关系  
  1.服务器的内存大小(当内存不大于2G情况下)  
  2.web.config中的上传限定大小  
  3.C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config文件内memoryLimit设定  
  想要上传更大文件的方法  
  1.增大服务器的内存,在第2点未修改条件下,如果有2G内存,估计即可上传600M  
  2.设置web.config里面的上传最大值,比如设置到2000M(2000000)  
  3.将memoryLimit默认的60,修改为100以下(比如90),如此,系统将会把你的服务器所有内存的90%全部拿来以供上传。经过以上设置,估计可上传900M文件。  
  如果内存超过2G,由于操作系统正常能使用的内存大小上限为2G,此时应用一些特殊的办法,能够让系统使用更多的内存,如果能做到此点,那么,可以上传更大的文件。  
  根据粗略的估计,上传1M的文件,需要使用服务器2M的内存,可大致按照这个比例来计算。  
  我已成功尝试过上传最大350M大小的文件Top

30 楼smin1994(smin1994)回复于 2005-10-11 09:01:15 得分 0

不错的帖子Top

31 楼byyt(KingCobra)回复于 2005-10-11 09:11:39 得分 0

好帖!Top

32 楼eyych(2006)回复于 2005-10-11 09:21:31 得分 0

 
   
  不设置  
  web.config中的maxRequestLength值  
   
  直接通过  
  PostedFile.ContentLength    
  判断即可。。。。Top

33 楼Bye1980(四月·来也勿勿·去也冲冲)回复于 2005-10-11 14:45:37 得分 0

好帖!  
  Top

34 楼truelove12(结贴者寥寥无几,心寒ing...)回复于 2005-10-24 15:36:30 得分 0

eyych,你没有看清楚上面的问题,当你超过web.config中的maxRequestLength时,程序就会报dns错误了,你的那个段是不会执行的。因为此时,应用已经崩溃。  
   
  首先先感谢楼上若干朋友的答复。  
  但是最关键的问题还是没有解决。即在上传超过web.config中的maxRequestLength时,程序应该在有所有提示,并禁止上传,这才是最终应该实现的。  
   
  感谢各位关注!Top

35 楼hchxxzx(NET?摸到一点门槛)回复于 2005-10-24 20:07:56 得分 0

但是最关键的问题还是没有解决。即在上传超过web.config中的maxRequestLength时,程序应该在有所有提示,并禁止上传,这才是最终应该实现的。  
  --------------------------------  
  你可尝试修改C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config文件内memoryLimit设定,在默认情况下,该值为60,表示将使用你服务器的60%的内存资源进行上传,因此,一旦超出上传上限,则系统将自动清除内存中的数据,所以不报错。假设你把它修改为超过100,比如150%,那么,上传动作将自动进行下去,并且不会报错,但服务器将会耗尽资源,有可能会引起死机。  
  Top

36 楼ligaru(为了生活重新学C++)回复于 2005-11-22 08:58:53 得分 0

学习Top

37 楼leagenary(lee)回复于 2005-11-22 10:16:07 得分 0

markTop

38 楼bytesoon(lt)回复于 2005-11-22 10:29:26 得分 0

脚本在客户端是不能访问文件的  
  可以做个插件  
   
   
   
  ------------------------------------  
  我的团队:www.51team.com  
   
  欢迎访问,有志者共谋事,每天都有惊喜,SOHOTop

39 楼ipqxiang(Seans)回复于 2006-01-11 11:47:01 得分 0

下载有没有设置大小限制的,我就碰到这种情况,如何解决?!Top

相关问题

  • input上传控件怎么能限制只传图像文件?
  • 关于文件上传控件
  • 文件上传控件的赋值问题
  • ASP.NET的文件上传控件是哪个?
  • 谁能推荐一个好用的文件上传控件?
  • 求助!!!文件上传控件样式如何设置?
  • 文件上传控件上使用出现问题
  • 请问用asp.net自带的上传控件能传多大的文件
  • asp.net支持多文件上传带进度条的上传控件
  • 50分求上传多个文件的源程序,最好有上传控制等功能

关键词

  • .net
  • asp.net

得分解答快速导航

  • 帖主:truelove12
  • jyk
  • hchxxzx

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo