【问题标题】:ERR_CONNECTION_RESET: The connection was reset when uploading a large fileERR_CONNECTION_RESET:上传大文件时连接被重置
【发布时间】:2011-12-29 02:02:34
【问题描述】:

我遇到了一个神秘错误,即大于 4MB 的文件会生成随机错误。后来我意识到这是由于http maxrequestlength .默认上传时,图片不能大于 4MB。

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

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

执行Server.GetLastError()时产生异常:

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

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

如果我在 application_error 方法中尝试任何代码,例如重定向,仍然是错误页面: 错误 101 (net::ERR_CONNECTION_RESET):连接已重置。 被展示。

问题

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

  2. 如果问题 1 无法“回答”,是否有办法拦截此错误并显示友好错误?

【问题讨论】:

  • 这看起来像是 IIS 限制。
  • 请问这到底是什么意思?是我的代码还是 IIS 的问题?我不认为我什至使用 IIS,因为我只是在 Visual Studio 上运行并启动了一个临时服务器!
  • 您的意思是您使用的是 Cassini。我不知道。内部异常是什么?
  • 对不起,我不知道 Cassini 是什么:/ 内部异常:超出最大请求长度

标签: asp.net iis maxrequestlength


【解决方案1】:

试试这个。

web.config中系统web下

添加这一行..

  <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.");
            }

如果您觉得有用,请将其标记为您的答案,否则请告诉我..

【讨论】:

  • 感谢您的建议。我现在会尝试使用它。经过更多调试后,我可以添加以下信息: - Response.Headers 'Response.Headers' 在我打开它时抛出了 'System.PlatformNotSupportedException' System.Collections.Specialized.NameValueCollection {System.PlatformNotSupportedException} 类型的异常,相关消息我发现是“此操作需要IIS集成管道模式。”
  • 我已经尝试过你的建议,它确实有效,因为 maxRequestlength 非常大。我对此进行了研究。但是,如果用户放置的东西大于 maxRequestLength,将会发生什么(尽管这种情况很少发生),从开发人员的角度来看,它仍然像“作弊”。没有更简洁的方法吗? PS 我不使用异步文件上传,我应该改用它吗?
  • 使用@AnandMohanAwasthi 建议的方法实际上是在浪费资源。您让用户上传一个巨大的文件,然后在服务器上拒绝它,因为它大于您在代码中的下限。我自己正在寻找更好的解决方案,但强烈认为建议的解决方案是错误的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 2013-10-02
  • 2011-04-25
  • 1970-01-01
  • 2021-12-11
相关资源
最近更新 更多