Есть ли способ получить прогресс загрузки с помощью класса HttpPostedFile? - PullRequest
3 голосов
/ 20 июля 2009

Я хочу использовать класс HttpPostedFile для загрузки одного или нескольких больших файлов в контроллер ASP.NET MVC с веб-страницы. Используя этот класс, загруженные файлы размером более 256 КБ буферизуются на диск, а не хранятся в памяти сервера.

Насколько я понимаю, это можно сделать так:

if (context.Request.Files.Count > 0)
{
    string tempFile = context.Request.PhysicalApplicationPath;
    for(int i = 0; i < context.Request.Files.Count; i++)
    {
        HttpPostedFile uploadFile = context.Request.Files[i];
        if (uploadFile.ContentLength > 0)
        {
            uploadFile.SaveAs(string.Format("{0}{1}{2}",
              tempFile,"Upload\\", uploadFile.FileName));
        }
    }
}

Есть ли способ установить обратный вызов или, используя какой-либо другой метод, периодически возвращать статус на веб-страницу через AJAX или JSON, чтобы можно было отображать индикатор выполнения и процент выполнения? Как будет выглядеть код?

Ответы [ 2 ]

4 голосов
/ 21 июля 2009

Неа. Asp.net всегда загружает весь контент запроса, как только вы используете HttpRequest.InputStream.

Если вы хотите предоставить такую ​​обратную связь, вам нужно либо сделать это на стороне клиента, используя что-то вроде flash, либо написать свой собственный http hanlder, который будет напрямую переходить к методам HttpWorkerRequest для загрузки тела объекта самостоятельно.

0 голосов
/ 02 декабря 2009

Я склонен согласиться с serialseb. Вам нужно написать свой собственный обработчик http, который, возможно, выводит прогресс загрузки в какое-то событие, которое, возможно, с определенным действием для запроса такого прогресса ', позволяет клиенту периодически запрашивать обновления.

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