2011-11-14 156 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提出的方法實際上是浪費資源。你讓用戶上傳一個大文件,然後在服務器上拒絕它,因爲它大於你在代碼中的下限。我自己尋找更好的解決方案,但強烈感受到建議的解決方案是錯誤的解決方案。 –

相關問題