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