Многокомпонентный запрос теряет информацию о загрузке больших файлов из IE 7/8 - PullRequest
1 голос
/ 22 ноября 2011

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

Но IE 7/8 явно не позволяет нам это делать. Поэтому мы хотели бы обнаружить эту сторону сервера и отправить обратно соответствующее сообщение. Однако возникают исключения, когда мы видим, что части запроса отсутствуют.

Я вижу свойства в моем запросе Fiddler, поэтому я знаю, что они отправляются:

-----------------------------7db16b332033c
Content-Disposition: form-data; name="folderId"

CA15R1bH08ZxJ`DPL0mstwGjHMlrjKobu9VHBoPASniX8`UXgM8dnazjICvwfUj2qUKk14rh|NlB|uaUNkiVjPAqkX`kxWRl
-----------------------------7db16b332033c
Content-Disposition: form-data; name="docGuid"


-----------------------------7db16b332033c
Content-Disposition: form-data; name="fromSharedTree"

false

Однако свойства недоступны, когда я выполняю следующий код, поэтому создаются исключения.

        string categoryId = request["folderId"];
        string docGuid = request["docGuid"];
        bool isUpdate = !string.IsNullOrWhiteSpace(docGuid);
        bool isShared = bool.Parse(request["fromSharedTree"]);

Куда делись значения? Как мне их вернуть!?

Редактировать

Любая попытка доступа к Request.InputStream приводит к исключению в этом сценарии. Казалось бы, это связано. Кто здесь устанавливает ограничение по размеру? Это .NET? IIS?

1 Ответ

0 голосов
/ 22 ноября 2011

На стороне сервера вот как вы обрабатываете загруженные размеры файлов:

foreach (HttpPostedFileBase file in Request.Files)
{
    if (file.ContentLength > 2097152)
    {
        // ... this file is larger than 2 MB
    }
}

Также убедитесь, что вы установили достаточно большой maxRequestLength в вашем файле web.config (<httpRuntime executionTimeout="240" maxRequestLength="20480" />) или действие контроллера может не выполняться вообще, если файл превышает допустимую квоту.

Вы также можете найти следующую статью полезной для загрузки файлов в ASP.NET MVC.

...