Я не уверен, почему вы хотите сворачивать самостоятельно, так как есть несколько элементов управления загрузкой с использованием Ajax, Flash, Silverlight и т. Д. Тем не менее, концепция касается запросов на прогресс и возврата текущего состояния. This guy went through the same process and shows how he built a component using jQuery.
Отображение прогресса требует, чтобы ваш клиент получал обратную связь с вашего сервера. Это означает, что на ваш сервер повторяются запросы для достижения прогресса. Отобразите прогресс на вашем клиенте, используя эту информацию.
На вашем сервере вы должны не только принимать входящие файлы, но и отвечать на совокупный прогресс. Легко получить заголовок Content-Length, переданный в запросе; проблема заключается в том, что вы не сможете полагаться на эту информацию. Существуют стратегии борьбы с этим, но для этого требуется, чтобы у вас был код, который принимает загруженный файл, так как вам придется читать входящие биты.
На данный момент у вас есть другие вещи, о которых стоит заботиться, которые находятся далеко за пределами области выполнения, например, при обработке больших загрузок файлов на вашем веб-сервере (вне процесса намного менее вредно на ваш сервер.)
Из-за сложностей, связанных с этим, я бы рекомендовал вам найти существующий компонент вместо создания собственного.
, когда вы имеете в виду «получение обратной связи с вашего сервера», означает ли вы, что на том же конвейере запроса, на котором происходит загрузка? Это возможно? – deostroll
Нет, это еще один запрос к серверу - скорее всего, вызов веб-службы, который возвращает информацию, необходимую для получения информации о ходе загрузки. Сервер отвечает за знание того, на каком этапе находится ваша загрузка, и для того, чтобы узнать, какой файл загрузки должен отчитываться перед вами. – jro
Какова стратегия использования? – deostroll