IIS asp.net mvc частично?файл загружен - PullRequest
3 голосов
/ 16 сентября 2010

Учитывая следующий код, который является чрезвычайно общим, я надеялся, что кто-нибудь может рассказать мне немного о том, что происходит за кулисами ...

[HttpPost]
public ActionResult Load(Guid regionID, HttpPostedFileBase file)
{
    if (file.ContentLength == 0)
        RedirectToAction("blablabla.....");

    var fileBytes = new byte[file.ContentLength];
    file.InputStream.Read(fileBytes, 0, file.ContentLength);
}

В частности, файл полностью загружен всервер, прежде чем мой метод действия вызывается?Или это вызов метода file.InputStream.Read (), который вызывает или, скорее, ожидает загрузки всего файла.Можно ли выполнить частичное чтение в потоке и получить доступ к «фрагментам» файла по мере его загрузки?(Если весь огонь загружен до того, как мой метод будет вызван, то это все спорный вопрос.)

Может кто-нибудь указать мне полезную информацию о внутренней работе здесь.Есть ли здесь разница между IIS6 или II7?

Спасибо,

1 Ответ

5 голосов
/ 16 сентября 2010

Файл while необходимо отправить на сервер перед вызовом метода действия.Цитата из документации :

Файлы загружаются в формате MIME multipart / form-data.По умолчанию все запросы, включая поля формы и загруженные файлы размером более 256 КБ, буферизуются на диск, а не хранятся в памяти сервера.

Вы можете указать максимально допустимый размер запроса, обратившись к свойству MaxRequestLength илиустановка атрибута maxRequestLength элемента httpRuntime Element (схема настроек ASP.NET) в файле Machine.config или Web.config.По умолчанию установлено значение 4 МБ.

Объем данных, которые буферизуются в памяти сервера для запроса, который включает в себя загрузку файлов, может быть указан путем доступа к свойству RequestLengthDiskThreshold или путем установки атрибута requestLengthDiskThreshold элемента httpRuntime (Элемент схемы настроек ASP.NET) в файле Machine.config или Web.config.

Память сервера не будет использоваться на сервере, но содержимое файла будет буферизовано на диск.Как только клиент отправит весь файл, конвейер ASP.NET вызовет действие вашего контроллера, и вы сможете прочитать поток запроса в виде кусков и сохранить его в другом файле, который будет определенным местом расположения загруженного файла.Действие не может быть вызвано до завершения загрузки файла, поскольку в multipart/form-data могут быть некоторые другие поля, которые следуют за файлом, и в этом случае они не будут назначены.

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