Asp.Net расширенная загрузка файлов - PullRequest
6 голосов
/ 11 января 2012

При использовании стандартного <input type="file" /> на сайте mvc3 вы можете получить файл в своем методе действия, создав входной параметр типа HttpPostedFile и установив для формы enctype="multipart/form-data"

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

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

Для выполнения вышеизложенного я полагаю, что вам потребуется обработать эту часть запроса в HttpModule или в пользовательском HttpHandler.возможно.Я знаком с тем, как эти вещи работают, но я не знаком с методом асинхронного получения данных о загрузке файла.

Я знаю, что это возможно, потому что я работал со сторонними компонентами вв прошлом это делалось (обычно, чтобы они могли сообщать о ходе загрузки или кэшировать данные на диск, чтобы избежать ограничений памяти iis / asp.net).К сожалению, все компоненты, которые я использовал, имеют закрытый исходный код, поэтому я не могу заглянуть внутрь и посмотреть, что они делают.

Я не ищу код, но кто-то может подсказать мне в правильном направлении?

1 Ответ

1 голос
/ 11 января 2012

Используя службу WCF, вы можете отправлять потоки файлов в службу и из нее.

Вот код получения сервисной стороны, который я использую:

int chunkSize = 2048;
byte[] buffer = new byte[chunkSize];

using (System.IO.FileStream writeStream =
    new System.IO.FileStream(file.FullName, System.IO.FileMode.CreateNew, System.IO.FileAccess.Write))
{
    do
    {
        // read bytes from input stream
        int bytesRead = request.FileByteStream.Read(buffer, 0, chunkSize);
        if (bytesRead == 0) break;

        // write bytes to output stream
        writeStream.Write(buffer, 0, bytesRead);
    } while (true);

    writeStream.Close();
}

Если это похоже на то, что вы хотите, проверьте CodeProject Progress Transfer File . В нем много подробностей, на которых мой код свободно основан.

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