我正在使用 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/