Как загрузить несколько файлов одним HTTP-запросом? - PullRequest
43 голосов
/ 25 июня 2009

Вариант использования: пользователь нажимает ссылку на веб-странице - бум! загрузка файлов, сидящих в его папке.
Я пытался упаковать файлы, используя multipart / mixed сообщение , но, похоже, оно работает только для Firefox

Вот так выглядит мой ответ:

HTTP/1.0 200 OK
Connection: close
Date: Wed, 24 Jun 2009 23:41:40 GMT
Content-Type: multipart/mixed;boundary=AMZ90RFX875LKMFasdf09DDFF3
Client-Date: Wed, 24 Jun 2009 23:41:40 GMT
Client-Peer: 127.0.0.1:3000
Client-Response-Num: 1
MIME-Version: 1.0
Status: 200

--AMZ90RFX875LKMFasdf09DDFF3 
Content-type: image/jpeg 
Content-transfer-encoding: binary 
Content-disposition: attachment; filename="001.jpg" 

<< here goes binary data >>--AMZ90RFX875LKMFasdf09DDFF3 
Content-type: image/jpeg 
Content-transfer-encoding: binary 
Content-disposition: attachment; filename="002.jpg" 

<< here goes binary data >>--AMZ90RFX875LKMFasdf09DDFF3 
--AMZ90RFX875LKMFasdf09DDFF3--

Спасибо

P.S. Нет, архивация файлов невозможна

Ответы [ 3 ]

33 голосов
/ 25 июня 2009

Zipping - единственная опция, которая будет иметь стабильный результат во всех браузерах. Если это не вариант, потому что вы не знаете, что почтовые индексы могут генерироваться динамически, ну, они могут. Если это не вариант, потому что вы недовольны zip-файлами, ну ..

MIME / multipart для сообщений электронной почты и / или передачи POST на HTTP-сервер. Он никогда не предназначался для получения и анализа на стороне клиента транзакции HTTP. Некоторые браузеры это реализуют, другие нет.

В качестве другой альтернативы у вас может быть скрипт JavaScript, открывающий окна, загружающие отдельные файлы. Или Java-апплет (требующий Java Runtime на компьютерах, если это корпоративное приложение, это не должно быть проблемой [поскольку NetAdmin может развернуть его на рабочих станциях]), который загружал файлы в каталог по выбору пользователя.

1 голос
/ 25 июня 2009

Помните, что делали это> 10 лет назад в netscape 4 дня. Он использовал границы вроде того, что вы делаете, и не работал вообще с другими браузерами в то время.

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

0 голосов
/ 25 июня 2009

Вы можете использовать кодировку base64 для встраивания (очень маленького) изображения в документ HTML, однако с точки зрения браузера / сервера технически вы все еще отправляете только 1 документ. Может быть, это то, что вы собираетесь делать?

Встраивание изображений в HTML с использованием Base64

РЕДАКТИРОВАТЬ: я только что понял, что большинство методов, которые я нашел в моем поиске Google, поддерживают только Firefox, а не iE.

...