Индикатор прогресса с контролем FileUpload - PullRequest
3 голосов
/ 07 января 2010

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

Я использую элемент управления fileUpload для этого:

protected void Button1_Click(object sender, EventArgs e)
    {
        if (fileUploader.HasFile)
        try {
          fileUploader.SaveAs(Server.MapPath("Uploads\\") + fileUploader.FileName);
          errorMessage.Text = "File name: " +
               fileUploader.PostedFile.FileName + "<br>" +
               fileUploader.PostedFile.ContentLength + " kb<br>";
        }
        catch (Exception ex) {
          errorMessage.Text = "ERROR: " + ex.Message.ToString();
        }
        else
        {
           errorMessage.Text = "You have not specified a file.";
        } 
    }

Файлы могут иметь размер до 50 МБ (я изменил web.config, чтобы разрешить это). У меня проблема в том, что с большими файлами пользователь не может видеть ход загрузки.

Я хочу знать, как я могу отобразить прогресс на странице, чтобы пользователь мог видеть, что что-то происходит. Не суетиться ни о чем причудливом - просто что-то вроде:

загружено байт / всего байт

было бы хорошо. Я могу получить общее количество байтов с помощью postsFile.ContentLength, но не знаю, как загрузить загруженные байты.

Также - могу ли я обновить экран во время загрузки?

Приветствия

Ben

Ответы [ 3 ]

5 голосов
/ 07 января 2010

Этот ответ не относится к ASP ...

Загрузка файла обычно выполняется с помощью запроса HTTP POST с Content-type: multipart/form-data. Это включает тело файла в одной из частей тела запроса.

Таким образом, на данной вкладке браузера может быть загружена только одна страница в данный момент времени. Короткий ответ: если вы действительно не полюбите iframes (один для статуса, другой для загрузки), вы не сможете показать статус.

Однако , если вы используете Flash, вы можете. http://www.uploadify.com/ - это отличный маленький внешний плагин (для jQuery), который позволяет пользователю выбирать несколько файлов и выгружать их все, показывая состояние по пути. Я просто подключил его к сайту, который ограничивает загрузку до 64M. Работает потрясающе.

4 голосов
/ 07 января 2010

Ваша реализация является синхронной операцией, которая не «отзывает» пользователя о ходе загрузки файла.

Существует довольно много альтернатив и сторонних компонентов, вы можете их погуглить.

Вот для начала: Загрузка файла ASP.NET с В режиме реального времени Индикатор выполнения

3 голосов
/ 07 января 2010

Я использовал несколько коммерческих компонентов для этого:

Telerik и AjaxUPloader

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