Ссылка на файл Chrome большой длины — сбои вкладок

Я использую JSZip для создания zip-файлов на моей HTML-странице. После создания zip-файлов я размещаю эти файлы для загрузки, используя следующий механизм.

document.getElementById(elementId).href = "data:application/zip;base64,"+content;

Это хорошо работает для обычных ситуаций. Однако иногда zip-файлы длиннее 2 МБ, и, следовательно, длина URL-адреса превышает 2097152 символа. Когда я нажимаю на эту ссылку, вкладка вылетает. По этой ссылке я обнаружил, что

Текущее ограничение длины URL-адреса в Chrome составляет 2097152 символа.

Я хотел знать, каковы возможные способы решения этой проблемы без разделения zip-файла. Есть ли другой способ представить файл для скачивания?


person RajeshShah    schedule 18.06.2014    source источник


Ответы (1)


Вы можете использовать saveAs в последних браузерах (или полифил FileSaver.js). Из http://stuk.github.io/jszip/documentation/howto/write_zip. HTML :

var blob = zip.generate({type:"blob"});
saveAs(blob, "hello.zip");
person David Duponchel    schedule 18.06.2014
comment
Спасибо, Дэвид. Я попробую это, но есть вопрос. Открывает ли saveAs всплывающее окно, например location.href? Потому что я не хочу всплывающих окон. Вместо этого я хочу сохранить ссылку для загрузки в элементе, который пользователь может позже щелкнуть для загрузки. Причина этого в том, что во время 1 запуска создается несколько zip-файлов, и я бы не хотел, чтобы всплывающее окно запрашивало сохранение для каждого файла. Спасибо. - person RajeshShah; 19.06.2014
comment
Да, вы получите всплывающее окно загрузки, как только позвоните saveAs. Вы можете использовать URL-адрес большого двоичного объекта, чтобы получить желаемое поведение (обязательно протестируйте IE 10/11, у меня были проблемы с ними в прошлый раз, когда я пытался). Другое решение состоит в том, чтобы сохранить сгенерированный почтовый индекс и инициировать вызов saveAs, когда пользователь щелкает ссылку. - person David Duponchel; 21.06.2014
comment
Как мне сохранить zip и вызвать saveAs при нажатии? Где будет храниться большой двоичный объект в течение этого периода? - person RajeshShah; 26.06.2014