Http и загрузка файлов - как это реально работает (под капотом) - PullRequest
16 голосов
/ 24 июня 2009

Хорошо, это может показаться небольшим вопросом, но один из многих веб-разработчиков, которых я знаю, не совсем понимает.

В основном, как происходит загрузка файла из поля ввода файла веб-страницы на веб-сервер (например, на сайт .net) с загруженным событием элемента управления FileUpload?

Насколько я понимаю, на сервер было отправлено сообщение с запросом потока, который затем передается обратно в браузер и начинается потоковая передача данных на сервер.

Мой друг говорит, что, как он понимает, весь файл закодирован браузером в запрос на публикацию, а затем (массивная) запись отправляется на сервер.

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

Так как же это на самом деле работает от браузера к серверу?

Ответы [ 2 ]

9 голосов
/ 24 июня 2009

Твой друг прав. Если вы хотите индикатор выполнения AJAX, вы должны перепрыгнуть через несколько обручей.

Обычно методика заключается в публикации загрузки внутри iframe в IHttpHandler на сервере, который хранит прогресс на сервере в общесерверном словаре, снабженном идентификатором, который составляет клиент, и включает его в запрос выполнения AJAX и загрузить пост. Таким образом, когда клиент делает запросы AJAX, серверный код, обрабатывающий этот запрос, может прочитать значение из этого словаря, чтобы увидеть, сколько байтов файла POST-запроса обработал сервер.

Да, это сложно:)

7 голосов
/ 24 июня 2009

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

ETA:

Стиль AJAX загружает упомянутую вами работу, выполняя публикацию в скрытом фрейме, а затем используя AJAX-запросы для проверки хода загрузки на стороне сервера.

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