jquery - 使用 JSZip 下载图像会导致浏览器崩溃

标签 jquery canvas zip

我正在使用 JSZip 将一组图像捆绑在页面上并创建一个 zip 文件来存储它们。相关函数如下:

// Make a zip file
$("#snapLink").click(function() {
  var zip = new JSZip();
  snapFolder = zip.folder("snaps")
  $("#snapRandom img").each( function(index){
    imageLink = $(this).attr('src').substring(22);
    snapFolder.file("snap" + index + ".png", imageLink, {base64: true});
  })
  snapZip = zip.generate();
  location.href="data:application/zip;base64,"+snapZip;
});

图像是从 Canvas 生成的,因此它们不在文件系统中。图片来源是数据url。

如果需要下载 1-3 张图像,此功能非常有用。一旦超过这个数量,浏览器可能会在超过 10 张图像时崩溃,它肯定会崩溃。到目前为止,我已经在 Mac 上的 Safari 和 Chrome 上对此进行了测试。图片大小约为120k。

您对如何实现这项工作有什么想法吗?提前致谢!

最佳答案

我有同样的问题,为了防止其他人想知道,我在这里发布了一个解决方案。

答案其实就在网站上:https://stuk.github.io/jszip/documentation/howto/write_zip.html

zip.generateAsync({type:"blob"})
.then(function (blob) {
    saveAs(blob, "hello.zip");
});

就这么简单。包含 FileSaver.js 并使用 blob 而不是 base64。

该错误是由 href 的字符限制引起的。

The current URL length limit in chrome is 2097152 characters

我最初认为我们必须使用 base64 来保存 zip 文件,因为图像是 base64 格式的。值得庆幸的是,我们可以将其保存为 blob 并克服 1.5Mb 左右的限制

关于jquery - 使用 JSZip 下载图像会导致浏览器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12984606/

相关文章:

jquery - 在 jEditable 中设置选择列表元素的样式

jquery - 从任何一侧调整元素的大小

javascript - 如何水平翻转图像

javascript - Canvas HTML 加载时间

python - 在内存中压缩/压缩 numpy 数组

javascript - 如何使用 jQuery 监听类型为“提交”的按钮上的单击事件?

jquery - 如何在 jQuery 中处理嵌套事件

javascript - 使用 webaudio 生成静态波形

linux - Bash 压缩脚本

java - 为什么 ZipFile(file, ZipFile.OPEN_READ) 不适用于 GZip