【问题标题】:Need help to download multiple images in zip file in angularjs需要帮助在 angularjs 的 zip 文件中下载多个图像
【发布时间】:2017-04-08 16:44:11
【问题描述】:

我的代码按照 jszip 2x 运行,但现在显示错误“此方法已在 JSZip 3.0 中删除,请查看升级指南。”。我已经检查了升级指南,但我的代码仍然无法正常工作。我需要帮助下载 angularjs 中 zip 文件中的多个图像。提前致谢。

  var zip = new JSZip();
            var count = 0;
            var zipFilename = "zipFilename.zip";
            var urls = [
                'http://54.190.15.249/photo/1476967612xyKgSfAlgHEHSt49LfnmvVw3MWTVq4.png',
                'http://54.190.15.249/photo/1476967612xyKgSfAlgHEHSt49LfnmvVw3MWTVq4.png',
                'http://54.190.15.249/photo/1476967612xyKgSfAlgHEHSt49LfnmvVw3MWTVq4.png'
            ];

            urls.forEach(function(url){
                var filename = "filename";
                // loading a file and add it in a zip file
                JSZipUtils.getBinaryContent(url, function (err, data) {
                    if(err) {
                        throw err; // or handle the error
                    }
                    zip.file(filename, data, {binary:true});
                    count++;
                    if (count == urls.length) {
                        var zipFile = zip.generate({type: "blob"});
                        saveAs(zipFile, zipFilename);
                    }
                });
            });

【问题讨论】:

  • 不是“为我编写代码”服务...
  • 您...查看过升级指南吗?
  • 哈哈。没有……
  • @TZHX 是的,我已经检查过了,但能够理解这就是为什么在这里寻求帮助

标签: javascript angularjs node.js jszip


【解决方案1】:

错误来自zip.generate... 已在 JSZip v3 中删除。正如upgrade guide 所说,您需要使用generateAsync,它会返回一个承诺。

在您的情况下,您可以编写一个函数来包装JSZipUtils.getBinaryContent 并返回结果的承诺(来自here):

/**
 * Fetch the content and return the associated promise.
 * @param {String} url the url of the content to fetch.
 * @return {Promise} the promise containing the data.
 */
function urlToPromise(url) {
    return new Promise(function(resolve, reject) {
        JSZipUtils.getBinaryContent(url, function (err, data) {
            if(err) {
                reject(err);
            } else {
                resolve(data);
            }
        });
    });
}

然后,对于每个 url,将其转换为下载内容的承诺并将其添加到您的 zip 对象(如 here):

urls.forEach(function(url){
  var filename = url.replace(/.*\//g, "");
  zip.file(filename, urlToPromise(url), {binary:true});
}
zip.generateAsync({type:"blob"}).then(function (zipFile) {
  saveAs(zipFile, zipFilename);
});

查看完整示例 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2016-05-30
    • 2015-01-02
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多