Я не уверен, возможно ли это с использованием стандартных веб-технологий.
Я хочу, чтобы пользователь мог загружать несколько файлов за одно действие. То есть установите флажки рядом с файлами, а затем получите все файлы, которые были проверены.
Возможно ли - если да, то какую базовую стратегию вы порекомендуете. Я знаю, что могу использовать технологию комет для создания событий на стороне сервера, которые запускают HttpResponse, но я надеюсь, что есть более простой способ.
http
web-applications
download
Анкур
источник
источник
источник
link.setAttribute('download', null);
переименовал все мои файлы в null.link.setAttribute('download',filename)
внутреннюю часть петли. Это позволяет вам называть файлы как угодно. Кроме того, я считаю, что это должно быть только имя файла, не включая URL-адрес. В итоге я отправил два массива: один с полным URL-адресом и один только с именем файла.Minecraft.jar
.Вы можете создать временный набор скрытых фреймов, инициировать загрузку с помощью GET или POST внутри них, дождаться начала загрузки и удалить фреймы:
Или без jQuery:
источник
setTimeout()
?Это решение работает во всех браузерах и не вызывает предупреждений. Вместо того, чтобы создавать
iframe
, здесь мы создаем ссылку для каждого файла. Это предотвращает появление предупреждающих сообщений.Для обработки циклической части мы используем
setTimeout
, что необходимо для работы в IE.источник
Google Chrome Version 76.0.3809.100 (Official Build) (64-bit)
.Самый простой способ - использовать несколько файлов, объединенных в ZIP-файл.
Я предполагаю, что вы могли бы инициировать несколько загрузок файлов, используя кучу iframe или всплывающих окон, но с точки зрения удобства использования ZIP-файл все же лучше. Кто захочет просмотреть десять диалоговых окон «Сохранить как», которые откроет браузер?
источник
Я согласен, что zip-файл - лучшее решение ... Но если вам нужно отправить несколько файлов, вот решение, которое я придумал. Он работает в IE 9 и новее (возможно, и в более ранней версии - я не тестировал), Firefox, Safari и Chrome. Chrome отобразит сообщение пользователю, чтобы получить его согласие на загрузку нескольких файлов при первом использовании вашего сайта.
Единственный побочный эффект этого метода заключается в том, что пользователь увидит задержку между отправкой и отображением диалогового окна загрузки. Чтобы свести к минимуму этот эффект, я предлагаю вам использовать технику, описанную здесь и по этому вопросу. Обнаружение, когда браузер получает загрузку файла, которая заключается в установке файла cookie с вашим файлом, чтобы знать, что он начал загрузку. Вам нужно будет проверить этот файл cookie на стороне клиента и отправить его на стороне сервера. Не забудьте указать правильный путь для вашего файла cookie, иначе вы можете его не увидеть. Вам также придется адаптировать решение для загрузки нескольких файлов.
источник
Версия iframe на jQuery отвечает:
источник
download(['http://nogin.info/cv.doc','http://nogin.info/cv.doc']);
Однако это не работает для загрузки файлов изображений.Угловое решение:
рабочий пример: https://plnkr.co/edit/XynXRS7c742JPfCA3IpE?p=preview
источник
Чтобы улучшить ответ @Dmitry Nogin: это сработало в моем случае.
Однако он не тестировался, так как я не уверен, как файловый диалог работает в различных комбинациях ОС / браузера. (Таким образом, вики сообщества.)
источник
Это работает во всех браузерах (IE11, firefox, Edge, Chrome и Chrome Mobile). Мои документы находятся в нескольких выбранных элементах. У браузеров возникают проблемы, когда вы пытаетесь сделать это слишком быстро ... Итак, я использовал тайм-аут.
Это решение, в котором используются обещания:
источник
Безусловно, самое простое решение (по крайней мере, в ubuntu / linux):
Работает как шарм.
источник
Чтобы решить эту проблему, я создал JS-библиотеку для потоковой передачи нескольких файлов прямо в zip-архив на стороне клиента. Основная уникальная особенность заключается в том, что он не имеет ограничений по размеру из памяти (все передается в потоковом режиме) или формата zip (он использует zip64, если содержимое превышает 4 ГБ).
Поскольку он не выполняет сжатие, он также очень эффективен.
Найдите его на npm или github !
источник
Следующий скрипт изящно выполнил эту работу.
источник
Я ищу решение для этого, но распаковка файлов в javascript не была такой чистой, как мне хотелось. Я решил инкапсулировать файлы в один файл SVG.
Если у вас есть файлы, хранящиеся на сервере (у меня их нет), вы можете просто установить href в SVG.
В моем случае я конвертирую файлы в base64 и вставляю их в SVG.
Изменить: SVG работал очень хорошо. Если вы собираетесь загружать только файлы, лучше использовать ZIP. Если вы собираетесь отображать файлы, то SVG кажется лучше.
источник
При использовании компонентов Ajax можно запускать несколько загрузок. Поэтому вы должны использовать https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow
Добавьте экземпляр AJAXDownload на свою страницу или что-то еще. Создайте AjaxButton и переопределите onSubmit. Создайте AbstractAjaxTimerBehavior и начните загрузку.
Удачной загрузки!
источник
Ниже код 100% рабочий.
Шаг 1. Вставьте код ниже в файл index.html.
Шаг 2. Вставьте код ниже в файл index.js.
ПРИМЕЧАНИЕ . Убедитесь, что все три файла, которые будут загружены, будут помещены в одну папку вместе с файлами angularProject / index.html или angularProject / index.js .
источник
Получение списка URL-адресов с помощью вызова ajax, а затем использование плагина jquery для параллельной загрузки нескольких файлов.
источник
Вот как я это делаю. Я открываю несколько ZIP, а также другие данные (я экспортирую проект в PDF и одновременно много файлов ZIP с документом).
Я просто копирую прошлую часть своего кода. Вызов от кнопки в списке:
Итак, простой вызов процедуры JS (ванильные правила!). вот процедура JS:
Уловка состоит в том, чтобы НЕ давать прямую ссылку на ZIP-файл, а отправить его в браузер. Как это:
источник
источник