how jszip async zip file when a lot of single file need to zip
我的英语不好,但是我对使用jszip有疑问。像这样的代码
1 2 3 | for (var i = 0; i < files.length; i++) { compressFiles(files[i], compressName); } |
1 2 3 4 5 6 7 8 9 | function compressFiles(file,compressName) { var fileContent = file.file; var fileName = file.name; var zip = new JSZip(); zip.file(fileName, fileContent); zip.generateAsync({ type:"blob" }).then(function (content) { saveAs(content, compressName); }); } |
我的问题是,当我的文件中的文件很大时,大约为88m。一些文件压缩约为0m我猜是异步的原因,循环将文件流一个接一个地放入内存,如果内存已满,则压缩文件。那么谁能告诉我真正的原因呢?谢谢!
您可以使用数组保留zip.file调用和jQuery.when等待它们全部完成,然后调用zip.generateAsync。下面的示例代码。
有用的链接:
jQuery.when
$ .when.apply($,someArray)有什么作用?
1 2 3 4 5 6 7 8 9 10 11 12 | function zipFiles(images) { var zip = new JSZip(); deferreds = []; images.forEach(function(image) { deferreds.push(zip.file(image.name, image.data, { binary: true })); }); $.when.apply($, deferreds).then(function() { zip.generateAsync({ type:"blob" }).then(function(content) { saveAs(content, 'Filename.zip'); //FileSaver.js }); }); } |