2016-11-24 21 views
-4

我有根據jszip 2x工作的代碼,但現在顯示錯誤「此方法已在JSZip 3.0中刪除,請檢查升級指南。」。我已經檢查過升級指南,但我的代碼仍然無法正常工作。我需要幫助下載在angularjs中的zip文件中的多個圖像。提前致謝。需要幫助下載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); 
        } 
       }); 
      }); 
+1

這是**不是**「爲我寫代碼」服務... –

+1

您是否...檢查了升級指南? – TZHX

+0

哈哈。沒有....... – baao

回答

0

錯誤來自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,它轉換爲下載的內容的一個承諾並把它添加到您的壓縮對象(如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