Скачать несколько файлов в одном HTTP-запросе - PullRequest
5 голосов
/ 25 февраля 2010

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

Я использую PHP в качестве серверного программного обеспечения.

Ответы [ 7 ]

12 голосов
/ 25 февраля 2010

Это можно отправить многочастный ответ в HTTP :

Как правило, HTTP обрабатывает составное тело сообщения не иначе, как любой другой тип носителя: строго как полезную нагрузку. […] Пользовательский агент HTTP ДОЛЖЕН следовать тому же или похожему поведению, что и пользовательский агент MIME при получении составного типа.

[…] Если приложение получает нераспознанный многочастный подтип, приложение ДОЛЖНО обрабатывать его как эквивалент «multipart / mixed».

Но поскольку Firefox является единственным браузером, который я знаю о поддержке таких многочастных ответов (кроме multipart / byterange ), для этой цели вам следует использовать некоторый формат файла архива.

8 голосов
/ 25 февраля 2010

То есть практически не может использоваться из-за плохой поддержки браузера.Вы можете упаковать их в файл tar или zip на стороне сервера и использовать файл архива.

4 голосов
/ 25 февраля 2010

Я думаю, что это невозможно, поскольку каждый HTTP-запрос имеет только один URI.

2 голосов
/ 25 февраля 2010

Вы можете заархивировать файл с помощью PHP на стороне сервера и запросить файл или вернуть его из своего скрипта, установив соответствующие заголовки, см. ZipArchive class

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

0 голосов
/ 23 июня 2017

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

<iframe style="display: none;" src="file1.zip"></iframe>
<iframe style="display: none;" src="file2.zip"></iframe>
<iframe style="display: none;" src="file3.zip"></iframe>

Большинство браузеров спрашивают пользователя, хотят ли они разрешить многократную загрузку (это позволяет запретить спаму веб-сайта файловую систему). Кроме того, вы должны убедиться, что файл действительно будет загружен, а не просто отображен внутри невидимого iframe (например, с помощью header('Content-disposition: attachment'); внутри сценария PHP, обслуживающего файл).

В моем решении я использую JavaScript для изменения src после загрузки каждого файла, поэтому файлы загружаются последовательно, и мой сервер должен обрабатывать меньше запросов одновременно. Но это решение требует AJAX и намного сложнее.

0 голосов
/ 25 февраля 2010

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

0 голосов
/ 25 февраля 2010

Не знаю об одном HTTP-запросе, но если вы хотите получить их все сразу, вы можете просмотреть их, изменяя header('Location:') для каждого из них и перенаправляя к сценарию немедленной загрузки. Хотя это было бы излишним и безобразным; Я думаю, что лучшим способом было бы сжать их все, инструкции о том, как это сделать, можно найти в PHP Documentation .

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