Jac*_*cob 15 asp.net iis-7 file-upload httpmodule httprequest
我们想在我们的网站上限制最大上传文件大小.我们已经在web.config中设置了适当的限制.我们遇到的问题是,如果上传了一个非常大的文件(例如1 GB),则在生成服务器端错误之前上传整个文件,并且无论文件是巨大的还是错误的类型都是不同的不.
有没有办法在实际上传之前检测挂起文件上传的大小?
这是我将相关请求限制为16 MB的相关web.config设置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<httpRuntime maxRequestLength="12288"/>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="12582912"/>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我已经尝试创建一个HTTP模块,这样我就可以在请求生命周期的早期拦截一个请求,但上传似乎甚至发生在以下BeginRequest事件之前HttpApplication:
public class UploadModule : IHttpModule
{
private const int MaxUploadSize = 12582912;
public void Init(HttpApplication context)
{
context.BeginRequest += handleBeginRequest;
}
public void Dispose()
{
}
private void handleBeginRequest(object sender, EventArgs e)
{
// The upload takes place before this method gets called.
var app = sender as HttpApplication;
if (app.Request.Files.OfType<HttpPostedFile>()
.Any(f => f.ContentLength > MaxUploadSize))
{
app.Response.StatusCode = 413;
app.Response.StatusDescription = "Request Entity Too Large";
app.Response.End();
app.CompleteRequest();
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
我知道像Flash这样的客户端技术可以在上传之前检测文件大小,但我们需要服务器端解决方法,因为我们希望定位没有Flash/Java/ActiveX/Silverlight支持的平台.我相信IIS或ASP.NET有一个错误,允许上传大文件,尽管有限制,所以我在这里提交了一个错误.
与HTTP模块和处理程序相比,ISAPI扩展是否可以让我更好地控制请求处理,例如,如果看到Content-Length标头大于允许的限制,允许我中止上传?
更新2:
叹了口气.微软已经关闭了我作为副本提交的错误,但没有提供其他信息.希望他们不仅仅是放弃了这一点.
更新3:
万岁!根据微软的说法:
此错误正在解决,因为它已移植到IIS产品团队.IIS团队已修复该错误,该错误将包含在Windows的未来版本中.
Microsoft在其 Microsoft Connect 网站上做出了以下回应:
该错误已被移交给 IIS 产品团队,正在得到解决。IIS 团队已经修复了该错误,该错误将包含在 Windows 的未来版本中。
如果您请求修复当前操作系统,则必须打开 QFE 请求。请告诉我这是否是您想要走的路线。请注意,提出 QFE 请求并不一定意味着它会获得批准。
所以我想我们必须等待 IIS 的下一个版本才能修复(除非满足 QFE 请求,无论是什么)。
| 归档时间: |
|
| 查看次数: |
4487 次 |
| 最近记录: |