2011-11-14 155 views
8

我有一个神秘的错误,其中大于4MB的文件产生了一个随机错误。后来我意识到这是由于http maxrequestlength 。默认情况下上传的图片大小不能超过4MB。ERR_CONNECTION_RESET:上传大文件时连接被重置

我知道这可以从web.config文件更改。

当我试图迎合这个错误,通过显示另一个页面,不同的错误开始弹出。调试时,程序立即进入application_error。

当执行生成Server.GetLastError()例外:

[System.Web.HttpUnhandledException] { “类型 'System.Web.HttpUnhandledException' 的异常是 抛出”} System.Web.HttpUnhandledException

堆栈跟踪:at System.Web.UI.Page.HandleError(Exception e)at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.Process请求(布尔 includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint) 在System.Web.UI.Page.ProcessRequest()处 System.Web.UI.Page.ProcessRequest System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext的上下文)(HttpContext的上下文)在 ASP.businessprofile_aspx.ProcessRequest(HttpContext上下文) c:\ Users \ Mattew \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ root \ 4ea30077 \ 8f66786f \ App_Web_h5fmhavk.4.cs:line 0 at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤, 布尔& completedSynchronously)

如果我尝试了application_error方法内的任何代码,例如重定向,仍然错误页面: 错误101(net :: ERR_CONNECTION_RESET):连接被重置。将显示 。

问题

  1. 应该如何这个错误如何处理?可以事先处理吗?所以这个错误不显示? (我试过使用jquery来获取文件大小,并检查它,但我发现它太复杂了

  2. 如果问题1不是'可回答',是否有方法来截获此错误并显示友好错误?

+1

这看起来像一个IIS限制。 – SLaks

+0

那是什么意思呢?这是从我的代码或从IIS的问题?我不认为我甚至使用IIS,因为我只是在Visual Studio上运行并启动了一个临时服务器! – test

+1

你的意思是你正在使用卡西尼。我不确定。什么是内在的例外? – SLaks

回答

11

在web.config中

加入这一行尝试了这一点。

在系统网络..

<system.web> 
<httpRuntime executionTimeout="999" maxRequestLength="2097151"/> 

然后,你需要检查文件的大小

if (AsyncFileUpload1.HasFile) 
     { 
      string FileName = Path.GetFileName(AsyncFileUpload1.PostedFile.FileName); 
      string Extension = Path.GetExtension(AsyncFileUpload1.PostedFile.FileName); 
      string FolderPath = ConfigurationManager.AppSettings["FolderPath"]; 
      string FilePath = Server.MapPath("~/xl/" + FileName); 
      double filesize = (double)AsyncFileUpload1.FileBytes.Length; 
      if (filesize < 106496) 
      { 
       //do something 
      } 
      else 
      { 
       Response.Write("File size must be less than 2MB."); 
      } 

如果你觉得有用,请把它标记为别人的答案,让我知道..

+0

感谢您的建议。我会尝试现在使用它。更调试完毕后,我可以添加以下信息: - \t \t Response.Headers \t 'Response.Headers' 扔类型的异常 'System.PlatformNotSupportedException' \t System.Collections.Specialized.NameValueCollection {System.PlatformNotSupportedException } 当我打开它, 我发现的相关消息是“此操作需要IIS集成管道模式。” – test

+0

我试过了你的建议,它确实工作,因为maxRequestlength非常大。我研究过这个。但是,如果用户放置比maxRequestLength更大的东西,会发生什么(尽管这种情况很少发生),但它仍然像开发人员的“作弊”一样。是不是有一个更好的方法来做到这一点? PS我不使用异步文件上传,我应该使用它吗? – test

+0

用@AnandMohanAwasthi提出的方法实际上是浪费资源。你让用户上传一个大文件,然后在服务器上拒绝它,因为它大于你在代码中的下限。我自己寻找更好的解决方案,但强烈感受到建议的解决方案是错误的解决方案。 –

相关问题