当很多单个文件需要压缩时,jszip如何异步压缩文件

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