#javascript #google-chrome #download #jszip
#javascript #google-chrome #Скачать #jszip
Вопрос:
Я использую JSZip для создания zip-файлов на моей HTML-странице. После создания zip-файлов я помещаю эти файлы для загрузки, используя следующий механизм
document.getElementById(elementId).href = "data:application/zip;base64," content;
Это отлично работает в обычных ситуациях. Однако иногда zip-файлы имеют длину более 2 МБ, и, следовательно, URL-адрес становится длиной более 2097152 символов. Когда я нажимаю на эту ссылку, вкладка вылетает. По этой ссылке я обнаружил, что
Текущее ограничение длины URL-адреса в Chrome составляет 2097152 символа
Я хотел знать, каковы возможные способы решения этой проблемы без разделения zip-файла. Есть ли другой способ представить файл для загрузки?
Ответ №1:
Вы можете использовать saveAs
в последних браузерах (или FileSaver.js полифилл). Из http://stuk.github.io/jszip/documentation/howto/write_zip.html :
var blob = zip.generate({type:"blob"});
saveAs(blob, "hello.zip");
Комментарии:
1. Спасибо, Дэвид. Я попробую это, но у меня возник вопрос. Открывает ли SaveAs всплывающее окно, например location.href? Потому что я не хочу всплывающего окна. Вместо этого я хочу сохранить ссылку на скачивание в элементе, который пользователь может позже щелкнуть для загрузки. Причина этого в том, что во время 1 запуска создается несколько zip-файлов, и я бы не хотел, чтобы всплывающее окно запрашивало сохранение для каждого файла. Спасибо.
2. Да, вы получите всплывающее окно загрузки, как только вы позвоните
saveAs
. Вы можете использовать URL-адрес большого двоичного объекта, чтобы получить желаемое поведение (обязательно протестируйте на IE 10/11, у меня были проблемы с ними в прошлый раз, когда я пытался). Другим решением является сохранение сгенерированного zip-файла и запускsaveAs
вызова, когда пользователь нажимает на ссылку.3. Как бы я сохранил zip и запустил сохранение по щелчку? Где большой двоичный объект будет храниться в течение этого периода?