2016-11-24 4 views
-4

herunterzuladen Ich habe Code, der nach jszip 2x funktioniert, aber jetzt zeigt Fehler "Diese Methode wurde in JSZip 3.0 entfernt, überprüfen Sie bitte die Upgrade-Anleitung.". Ich habe den aktualisierten Leitfaden bereits überprüft, aber mein Code funktioniert immer noch nicht. Ich brauche Hilfe, um mehrere Bilder in zip-Datei in angularjs herunterladen. Danke im Voraus.Brauchen Sie Hilfe, um mehrere Bilder in zip-Datei in angularjs

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

Dies ist ** nicht ** ein "schreibe den Code für mich" Service ... –

+1

Haben Sie ... die Upgrade-Anleitung überprüft? – TZHX

+0

Haha. Nein ....... – baao

Antwort

0

Der Fehler kommt aus zip.generate ..., die in JSZip v3 entfernt wurde. Wie sagt die upgrade guide, müssen Sie generateAsync verwenden, die ein Versprechen zurückgibt.

In Ihrem Fall können Sie eine Funktion schreiben JSZipUtils.getBinaryContent und gibt ein Versprechen des Ergebnisses zu wickeln (von 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); 
      } 
     }); 
    }); 
} 

für jede URL Dann verwandeln sie von dem heruntergeladenen Inhalt auf ein Versprechen und fügen sie es zu Ihrem Zip-Objekt (wie 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); 
}); 

das gesamte Beispiel here.