3

我正在使用 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;
});

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

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

您对如何使这项工作有任何想法吗?提前致谢!

4

1 回答 1

1

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

答案实际上在网站上: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 的字符限制引起的。

当前 chrome 中的 URL 长度限制为 2097152 个字符

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

于 2016-07-22T16:57:06.387 回答