0

我不擅长英语,但我有一个关于使用 jszip 的问题。像这样的代码

 for (var i = 0; i < files.length; i++) {
                    compressFiles(files[i], compressName);
                }

    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我猜原因是异步的,循环将文件流一一放入内存,如果内存已满,压缩文件。那么谁能告诉我真正的原因呢?谢谢!

4

1 回答 1

1

您可以使用一个数组来保存 zip.file 调用,并使用 jQuery.when 来等待所有这些调用完成,然后调用 zip.generateAsync。下面的示例代码。

有用的链接:
jQuery.when
$.when.apply($, someArray) 做什么?

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
        });
    });
}
于 2017-06-02T13:04:25.283 回答