Предотвращение загрузки больших файлов в ASP.NET 4.0

Мы ' Я хочу ограничить максимальный размер загружаемого файла на нашем веб-сайте. Мы уже установили соответствующие ограничения в нашем web.config. Проблема, с которой мы сталкиваемся, заключается в том, что загружается действительно большой файл (например, 1 ГБ), весь файл загружается до того, как будет сгенерирована ошибка на стороне сервера, и тип ошибки отличается от того, большой файл или нет.

Есть ли способ определить размер ожидающего загрузки файла до того, как произойдет фактическая загрузка?

Вот мои соответствующие настройки web.config, которые ограничивают запросы до 16 МБ:



    
        
    

    
        
            
                
            
        
    

Я попытался создать модуль 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()
            .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:

Sigh . Microsoft закрыла ошибку, которую я зарегистрировал как дубликат, но не предоставила никакой дополнительной информации. Надеюсь, они не упустили этот момент просто так.

Обновление 3:

Ура! Согласно Microsoft:

Эта ошибка устраняется, поскольку она была перенесена в команду разработчиков IIS. Команда IIS с тех пор исправила ошибку, которая будет включена в будущий выпуск Windows.

15
задан Jacob 7 September 2011 в 21:59
поделиться