Как найти пределы размера для POST на IIS с ASP.NET? - PullRequest
3 голосов
/ 03 июня 2010

У меня есть веб-сервис, на котором конечные пользователи будут загружать ZIP-архивы, которые могут быть очень большими (один тестовый файл превышает 200 МБ). Я хотел бы обрабатывать файлы большого размера с упреждением и корректно завершать загрузку при ограниченном размере.

Поскольку веб-приложение будет развернуто на компьютерах клиентов, я не могу легко гарантировать, что конфигурация соответствует любому фиксированному размеру. Я задокументировал, как использовать команду appcmd , чтобы установить значение requestLimits.maxAllowedContentLength сверх значения по умолчанию 30 МБ.

Но я бы хотел справиться с этим в веб-приложении; Я надеюсь на две вещи:

  1. Чтобы показать текущий лимит на странице, где они инициируют загрузку файла, что-то вроде:

    Загрузка каждого файла ограничена 15MB . Если ваш архив больше, (и т. Д. И т. Д.)

  2. Чтобы дать значимую ошибку при превышении этого размера. В настоящее время отправка данных занимает много времени, а затем я вижу вводящую в заблуждение страницу 404.

Есть мысли?

[Изменить]

http://www.developer.com/db/article.php/10920_3426051_2/Limiting-Upload-Sizes-with-ASPNET.htm

Я нашел вышеупомянутую статью - но, хотя я могу перехватить ошибку, я продолжаю получать сброс соединения в браузере на Request.Redirect () или Context.RewritePath () так что это на самом деле не лучше, чем 404. Хммм, на самом деле это с отладочным сервером VS2008, а не с IIS.

1 Ответ

3 голосов
/ 03 июня 2010

Чтобы получить контент MasxAllowed, вы можете использовать это

protected int GetMaxUploadSize()
{
    System.Web.Configuration.HttpRuntimeSection httpRuntimeSec = (System.Web.Configuration.HttpRuntimeSection)ConfigurationManager.GetSection("system.web/httpRuntime");  
    if (httpRuntimeSec != null)  
    {  
       return httpRuntimeSec.MaxRequestLength;  
    }  
    else
    {
       return 0;
    }
}

Также добавьте это в ваш web.config:

<system.webServer>
<security>
    <requestFiltering>
        <requestLimits maxAllowedContentLength="1000000" />
    </requestFiltering>
</security>

Для вашего второго вопроса я предлагаю использовать приложение на стороне клиента, чтобы вы могли проверить размер файла перед загрузкой, один из вариантов может быть silverlight

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...