Загрузка нескольких файлов в один HTTP-запрос

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

Я использую PHP как sscipting для серверов.

Спасибо

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

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

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

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

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

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

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

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

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

Я использую несколько невидимых фреймов, чтобы запускать сразу несколько загрузок. Будет более одного 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 и намного сложнее.

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