在我的ASP.NET MVC (v2 if it matters)应用中,我有一个允许用户上传文件的页面。我已经为我的应用程序配置了maxRequestLength,允许文件大小不超过25MB。作为测试,我向它发送了一个500MB的文件,其中抛出了异常:Maximum request length exceeded. (我之所以知道这一点,是因为ELMAH捕捉到了错误并记录了它)。
在我的web.config中,我用defaultRedirect设置了customErrors mode="On",但是用户根本不会被重定向,他们甚至不会出现黄屏死亡。例如,在Chrome中,你会看到这样的错误:Error 101 (net::ERR_CONNECTION_RESET): Unknown error.
有没有可能为这种情况提供更优雅的用户体验?
发布于 2010-06-17 05:32:00
据我所知,没有办法优雅地处理超出IIS的"maxRequestLength“设置。它甚至不能显示自定义错误页面(因为没有相应的HTTP代码可供响应)。解决这个问题的唯一方法是将maxRequestLength设置为高得离谱的千字节数,例如51200 (50MB),然后在上传文件后检查ContentLength (假设请求在90秒之前没有超时)。此时,我可以验证文件是否为<=5MB,并显示一个友好的错误。
发布于 2010-11-06 20:40:37
http://nishantrana.wordpress.com/2009/01/19/fileupload-page-cannot-be-displayed-and-maximum-request-length-exceeded-error/
试一下这里的最后一个解决方案,我试过了,效果很好。
发布于 2015-04-23 06:57:56
我解决了这个问题,如果选择的文件超过了最大请求长度,我会使页面无效(这样它就不会回发)。它需要客户端有一个自定义的验证控件,用于验证fileupload控件。下面是服务器验证子,用于将文件大小限制为4Mb:
Sub custvalFileSize_ServerValidate(ByVal s As Object, ByVal e As ServerValidateEventArgs)
'FileUpload1 size has to be under 4Mb
If (FileUpload1.PostedFile.ContentLength > 4194304) Then
e.IsValid = False
Else
e.IsValid = True
End If
End Sub以下是客户端验证函数:
function custvalFileSize_ClientValidate(src,args){
if (document.all("FileUpload1").files[0].size > 4194304){
args.IsValid = false;
} else {
args.IsValid = true;
}
}上传控件和验证控件:
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" BackColor="#FFFFFF" BorderColor="#FF0000" BorderStyle="solid" BorderWidth="0" ClientValidationFunction="custvalFileSize_ClientValidate" ControlToValidate="FileUpload1" Display="Dynamic" EnableClientScript="true" ErrorMessage="<b>Please upload document files of 4Mb or less.</b>"
Font-Bold="false" Font-Names="Verdana, Arial, Helvetica" Font-Size="9px" ForeColor="#FF0000" OnServerValidate="custvalFileSize_ServerValidate" Text="<br/><span style='font-weight:bold;font-size:12px;'>This file is too large.<br />We can only accept documents of 4Mb or less.</span>"></asp:CustomValidator>https://stackoverflow.com/questions/3007737
复制相似问题