上传过大的文件时显示有意义的错误

时间:2009-05-05 09:00:41

标签: asp.net file-upload

我们已对网站上传文件大小设置了固定限制 - 低于默认asp.net和iis设置的大小。

我在Application_BeginRequest中有一个简单的catch设置可以捕获它(它不是因为它检查ContentLength包括所有其他表单数据但它已经足够好了)。 我想要恢复用户尝试上传到的页面的处理,或者作为后备计划将用户重定向到页面,解释文件大小太大(我们已经有一个字幕解释这个,但你知道用户 - '他们不需要阅读没有臭的字幕')。

那么问题是什么?好吧,似乎我的响应已经发送给用户 - 404说明无法找到该页面。我不想要这种行为,我想要刷新这个响应,因为它不是我希望用户看到的那个 - 我想展示别的东西 - 构建我自己的响应,重定向或只是处理他们应该得到的页面反正。

我认为问题可能仍然是IIS拒绝请求/帖子,因为文件比IIS要大。我真的很喜欢这个 - 一个试图上传20meg图片的疯狂用户不应该让IIS Do Do Do Do but but but but but but but but but but but but but but but but或者我是否有机会拦截对用户的响应 - 而不是增加IIS上的最大大小,从而花费带宽来接收此文件,我只想将此帖子标识为“太大”并发送适当的响应回到用户。

3 个答案:

答案 0 :(得分:3)

很棒的资源!

我使用上面的链接来实现上传到服务器的文件的捕获量太大并被重定向到默认错误页面

web.config - >

    < customErrors mode="RemoteOnly" defaultRedirect="~/GenericError.htm" />

MyPage.aspx.cs - &gt;

    protected void Page_Error(object sender, EventArgs e)
    {
        if (HttpContext.Current.Error is HttpException)
            if ((HttpContext.Current.Error as HttpException).ErrorCode == -2147467259)
            {
                Server.ClearError();
                Response.Redirect(@"~/FileSizeError.htm", false);
            }
    }

答案 1 :(得分:2)

我有同样的问题,经过大量的搜索,似乎没有完美的解决方案。您可以更改最大请求长度以设置IIS将在哪个位置提供ASP.Net错误。您还可以在global.asax上捕获此错误,并向用户显示更加友好的错误页面。

您可以在http://www.developer.com/db/article.php/10920_3426051_2

找到有关执行此操作的详细信息

答案 2 :(得分:0)

上面的答案在IIS 7.5上对我不起作用。我们终于想出了以下内容:

void Application_PreSendRequestHeaders(Object sender, EventArgs e)
{
    if (
        Request.Headers["Content-Length"] != null && 
        int.Parse(Request.Headers["Content-Length"]) > 150000000 &&
        Request.RawUrl.EndsWith("/Release/ProjectReleases.aspx?Mode=Create"))
    {
        try
        {
            Response.Redirect("http://anyurl", true);
        }
        catch (HttpException ex)
        {
            if (ex.Message == "Maximum request length exceeded.")
            {
                Server.ClearError();
                Response.ClearHeaders();
                Response.Redirect("http://www.edward-williams.com", true);
            }
        }
    }
}

无需修改最大上传大小。最终版本根据web.config中的值设置了最大上传大小的静态值,并重定向到自定义错误页面与该主页,但您明白了。