如何从ASP.NET页面请求中删除上载的文件并处理该请求而不损害其完整性?

| 假设某人: 访问和ASPX页面(http获取请求)。 在文件上传器中设置一个“太大”文件,然后点击上传按钮(http发布请求)。 我不在乎提供自定义错误页面;太傻了,并破坏了应用程序。 我想以编程方式处理错误。可以通过global.asax的Application_BeginRequest处理程序来拦截(在接收到整个请求之后),如此处所述。 我想做的是从请求中删除超大文件,在\“ HttpContext.Current.Items [\” filetoolarge \“] = true \”之类的文件中设置某种标志,然后执行Server.Transfer到同一页面,这样请求就好像从未发送过文件一样运行,除了现在有这个错误标志,该页面当然会检查并在找到时显示一条不错的错误消息。 能做到吗?     
已邀请:
我知道如何不使用Flash或ActiveX的唯一方法是将maxRequestLength设置为较高的值,然后在文件可用时使用JavaScript访问有关文件的信息,然后处理取消/错误处理。我使用Telerik上载控件来执行此操作,但是您应该可以执行类似的操作。     
在您的web.config中将ѭ0设置为一个大值,如下所示:
<system.web>
        <httpRuntime maxRequestLength=\"26000\" executionTimeout=\"600\"/>
</system.web>
这样您就可以收到大文件了。然后像这样处理它:
        If fileUploader.PostedFile.ContentLength > theSize Then
            \'show error\'
        else
            \'process it\'
        End If
希望能帮助到你。 更新:
maxRequestLength
以KB为单位。 “ 4”以字节为单位。     
我在此处发布了解决方案:在哪里可以捕获和处理IIS7中超出的maxAllowedContentLength? 我的解决方案涉及重写页面的OnError处理程序,并且我认为它仅在.NET 4.0中有效,因为它涉及将最后一个异常作为HttpException并检查WebEventCode属性,该属性在.NET 4.0框架中似乎是新的。 还有另一种解决方案,涉及拦截Application_EndRequest全局应用程序处理程序,其中StatusCode和SubStatusCode属性值均可用,但我认为它不起作用,因为响应可能已在响应时被刷新到客户端。引发EndRequest事件。 根据我的经验,OnError和Application_EndRequest方法几乎都可以立即运行,远早于服务器可能会收到整个请求,因此,由于有关请求大小的一些早期警告,它可能会被触发。 我已经测试了OnError方法,该方法可以完美地工作,除了不可避免的延迟外,浏览器坚持要求在处理和显示服务器响应之前完成其请求的上载。 可在此处找到有关Web事件代码的信息-http://msdn.microsoft.com/zh-cn/library/ff650306.aspx     

要回复问题请先登录注册