То, что вы описываете, является окончательной битвой за получение дополнительной информации о HttpFileUpload в спецификациях HTML 2.0, поскольку это спецификация HTML, на которую вы ссылаетесь для формы POST. К сожалению, HttpFileUpload не позволяет вам получить это - даже в Javascript. Это очень распространенная проблема.
Два решения:
Обычное решение - изменить ваш файл web.config и изменить время выполнения http (как долго разрешать загрузку, например, 30 минут для большого файла) и размер файла http, чтобы увеличить ограничение (по умолчанию 4 МБ ). Это относится к Ruby / php, ASP.NET и ASP.NET MVC - это относится ко всем языкам, поскольку это спецификация HTML 2.0, которая ограничивает данные HttpFileUpload, которые вы можете получить в форме POST. Это позволит пользователю загрузить весь файл; и затем вы обработаете ограничения с вашей стороны в коде сервера. Не лучшее решение; но это единственное решение, если вы не используете третью часть.
Использовать сторонний плагин "file monitor".
Один из самых простых, что я видел, это RadControls от Telerik. Что эти элементы управления делают с нами, они устанавливают HttpModule, HttpHandler и специальный javascript. Есть несколько сторонних организаций, которые это делают, но в основном это так:
- Javascript захватывает отправку HttpFileUpload и перенаправляет форму POST в специальный обработчик (например, /RadControlsUploadHandler.asmx).
- RadControlsUploadHandler обновляет статическую переменную фактических байтов, загруженных в реальном времени.
- Затем Javascript загружает всплывающее окно «Progress Bar», константа которого попадает в RadControlsUploadHandler.asmx для обновления «Status». Это обновление состояния выполняет модуль HttpModule, который считывает данные статической переменной, находящиеся в процессе обработки исходного сообщения формы, в тот же обработчик.
- Затем модуль возвращает данные JSON обратно через ajax-вызов «Progress Bar», давая информацию о количестве загруженных байтов, предполагаемой пропускной способности и т. Д.
Вот демоверсия загрузки индикатора прогресса Telerik:
http://demos.telerik.com/aspnet-ajax/upload/examples/customprogress/defaultcs.aspx
Лично мне не нравится не знать, как они блокируют поток для этих загрузок - поскольку у меня есть проблемы с масштабируемостью при использовании этих сторонних инструментов при интенсивном использовании. Но для блога Джо Блоу они являются отличными инструментами.
Проблема с ASP.NET MVC
Проблема с этими сторонними инструментами заключается в том, что они работают только в ASP.NET WebForms - стандартном ASP.NET. ASP.NET MVC удаляет всю концепцию ASP.NET WebForms, что делает эти элементы управления бесполезными.
Хм, возможно, есть новый проект для кого-то, чтобы написать. :)