Как скачать несколько файлов из javascript

Я пытаюсь использовать window.location.href в цикле для загрузки нескольких файлов

У меня есть таблица, в которой я могу выбрать файл, затем я запускаю цикл selected и пытаюсь перейти к пути к файлу, чтобы загрузить файлы.

Я получаю только последний файл для загрузки.

Я думаю, это связано с тем, что местоположение herf принимает меры только после завершения моего javascript, а не во время выполнения кода.

Когда у меня есть точка останова на window.location.herf, он по-прежнему загружает только последний файл и только тогда, когда я позволяю коду пройти.

Есть ли лучший способ инициировать несколько загрузок из цикла javascript.


$("#btnDownload").click(function () {
  var table = $('#DocuTable').DataTable();
  var rows_selected = table.rows('.selected').data();
  $.each(rows_selected, function (i, v) {
    window.location.href = v.FilePath;
  });
});

person Pomster    schedule 12.09.2016    source источник
comment
HTML не поддерживает одновременную загрузку нескольких файлов. Вы можете создать GZIP файлов, чтобы получить один файл для загрузки, или вы можете создать по одному iframe для каждого файла на своей странице, чтобы загружать их все.   -  person cmizzi    schedule 12.09.2016
comment
Вам не нужно создавать несколько iframe элементов, если вы можете использовать window.open(url);   -  person R. Chappell    schedule 12.09.2016
comment
Хм ... Ты правда! :)   -  person cmizzi    schedule 12.09.2016
comment
@ R.Chappell Открытие нескольких таких окон, даже самозакрывающихся, может вызвать срабатывание блокировщиков всплывающих окон. Здесь можно использовать iframe.   -  person Joe Enos    schedule 12.09.2016
comment
@cmizzi Когда вы говорите о создании файла GZIP, я бы избегал этого и использовал вместо него традиционный Zip, чтобы все пользователи могли легко его распаковать.   -  person Joe Enos    schedule 12.09.2016
comment
@Joe Enos Это лучше, чем файлы, на которые есть ссылки, от открытия в скрытых фреймах, если типы заголовков неправильные. Мы не можем предположить, что знаем, что все эти файлы управляются правильно. Примером может быть ссылка на изображения.   -  person R. Chappell    schedule 12.09.2016
comment
@JoeEnos Если кто-то может извлекать ZIP-файлы (возможно, в Windows), вы также можете легко распаковать GZIP IMHA. Я всегда предпочитаю GZIP в качестве протокола передачи, но не стесняйтесь использовать ZIP :)   -  person cmizzi    schedule 12.09.2016
comment
@ R.Chappell Хороший замечание, если вы открываете фактический URL-адрес контента. В чем-то вроде этого я ожидал бы построить ссылки как что-то вроде downloadFile.aspx?file=somefile.txt, где сервер отвечает за правильное построение этих заголовков ответов, но если это не так, тогда фреймы не будут работать.   -  person Joe Enos    schedule 12.09.2016
comment
@cmizzi Windows (по крайней мере, 7, у меня нет 10 передо мной) не имеет встроенного экстрактора GZip, интегрированного в проводник Windows. Я лично использую 7-zip, но не ожидаю, что у всех будет что-то подобное.   -  person Joe Enos    schedule 12.09.2016


Ответы (2)


В некоторых браузерах (по крайней мере, в Google Chrome) поддерживается следующее:

$("<a download/>").attr("href", "https://code.jquery.com/jquery-3.1.0.min.js").get(0).click();
$("<a download/>").attr("href", "https://code.jquery.com/jquery-3.1.0.min.js").get(0).click();
$("<a download/>").attr("href", "https://code.jquery.com/jquery-3.1.0.min.js").get(0).click();

JSFiddle: https://jsfiddle.net/padk08zc/

person Zay Lau    schedule 12.09.2016
comment
Под совместимостью я подразумеваю одновременную загрузку нескольких файлов, я не уверен, разрешили ли другие браузеры эту функцию из-за риска для безопасности. В любом случае спасибо за сайт! - person Zay Lau; 12.09.2016

Я бы использовал фреймы и сценарий для принудительной загрузки файлов, как предлагали Джо Энос и cmizzi.

Ответ здесь поможет с помощью JavaScript открыть несколько окон iframe для каждого файла: Загрузить несколько файлов одним действием

Ответы на популярные языки помогут с принудительной загрузкой, если URL-адрес действительно может правильно обслуживаться через Интернет:

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

person R. Chappell    schedule 12.09.2016