2012-10-20 75 views
3

我正在使用JSZip在页面上捆绑一组图像,并创建一个zip文件来存储它们。以下是相关功能:使用JSZip下载崩溃浏览器的图像

// 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; 
}); 

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

这个工程很棒,如果有1-3个图像下载。一旦有超过10个图像的浏览器崩溃,它肯定会崩溃。我已经在Mac上的Safari和Chrome上测试了这一点。图像大约是120k。

对于如何使这项工作有什么想法吗?提前致谢!

+0

整个浏览器崩溃还是只是选项卡? –

+0

在Safari中,整个浏览器崩溃。在Chrome中,它就是这个标签。 –

回答

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目前的网址长度上限为2097152个字符

我最初以为我们不得不使用的base64保存压缩文件,因为图像是用base64。谢天谢地,我们可以将它保存为一个blob并获得1.5Mb-ish限制