Мы хотели бы ограничить максимальный размер загружаемого файла на нашем веб-сайте.Мы уже установили соответствующие ограничения в нашем web.config.Проблема, с которой мы сталкиваемся, заключается в том, что если загружен действительно большой файл (например, 1 ГБ), весь файл будет загружен до того, как будет сгенерирована ошибка на стороне сервера, иТип ошибки зависит от размера файла.
Есть ли способ определить размер ожидающей загрузки файла до фактической загрузки?
Вот мой соответствующий веб-сайтНастройки .config, ограничивающие запросы 16 МБ:
<?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>
Я пытался создать модуль 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();
}
}
}
Обновление:
Я знаю, что такие технологии на стороне клиента, как Flash, могут определять размеры файлов перед загрузкой, но нам нужнообходной путь на стороне сервера, потому что мы хотим ориентироваться на платформы, которые не поддерживают Flash / Java / ActiveX / Silverlight.Я считаю, что в IIS или ASP.NET есть ошибка, которая позволяет загружать большие файлы, несмотря на ограничения, поэтому я подал ошибку здесь .
Может ли расширение ISAPI дать мне большеконтролировать обработку запросов, чем HTTP-модули и обработчики, например, позволяя мне прервать загрузку, если заголовок Content-Length больше допустимого предела?
Обновление 2:
Вздох .Microsoft закрыла ошибку, которую я подал как дубликат, но не предоставила никакой дополнительной информации.Надеюсь, они не просто бросили мяч на этом.
Обновление 3:
Ура!Согласно Microsoft:
Эта ошибка устраняется, поскольку она была перенесена в группу разработчиков продуктов IIS.С тех пор команда IIS исправила ошибку, которая будет включена в будущий выпуск Windows.