【问题标题】:how jszip async zip file when a lot of single file need to zip当大量单个文件需要压缩时如何jszip异步压缩文件
【发布时间】:2017-03-15 06:34:25
【问题描述】:

我英语不好,但我有一个关于使用 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我猜原因是异步的,循环将文件流一一放入内存,如果内存已满,压缩文件。谁能告诉我真正的原因?谢谢!

【问题讨论】:

    标签: jszip


    【解决方案1】:

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

    有用的链接:
    jQuery.when
    What does $.when.apply($, someArray) do?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      相关资源
      最近更新 更多