La décompression de fichiers à l'aide de phonegap zip.js
suis en utilisant PhoneGap Cordova 3.3.0 et la dernière version de zip.js. Le script est en mesure d'obtenir la liste des fichiers à l'intérieur de l'archive, mais est incapable d'obtenir des données binaires. Suis l'aide de la correction par Hugeen mais pas de chance.
function decompress(fullsavepath, filename){
zip.useWebWorkers = false;
file_system.root.getFile("app_cache/temp.zip", {}, function(fileEntry){
fileEntry.file(function (file) {
zip.createReader(new zip.BlobReader(file), function(reader) {
//get all entries from the zip
reader.getEntries(function(entries) {
if (entries.length) {
//Output zip file contents
for(var i=0; i<entries.length;i++){
console.log(entries[i].filename);
}
//Try to decompress file no. 3
console.log('---- entries[2] '+entries[2].filename);
entries[2].getData(new zip.BlobWriter(), function(unzipData){
console.log(unzipData);
},null, null);
}
});
}, null);
})
},null);
}
Voici mon journal de la console avec les messages:
Console: ----entries[2] photoalbum/bpage1.jpg at file:///android_asset/www/dl/index.html:315
Console: processMessage failed: Message: S01 File821048650 AUEsDBBQAAAAIAEFVCEMFqmCrQAsHAMa3BwASAAAA at file:///android_asset/www/cordova.js:1034
Console: processMessage failed: Error: TypeError: undefined is not a function at file:///android_asset/www/cordova.js:1035
Console: processMessage failed: Stack: TypeError: undefined is not a function
Console: at inflate (file:///android_asset/www/dl/js/vendor/zip/zip.js:429:18)
Console: at file:///android_asset/www/dl/js/vendor/zip/zip.js:600:16
Console: at BlobWriter.init (file:///android_asset/www/dl/js/vendor/zip/zip.js:297:4)
Console: at file:///android_asset/www/dl/js/vendor/zip/zip.js:596:12
Console: at [object Object].<anonymous> (file:///android_asset/www/dl/js/vendor/zip/zip.js:203:5)
Console: at file:///android_asset/www/plugins/org.apache.cordova.core.file/www/FileReader.js:352:20
Console: at Object.callbackFromNative (file:///android_asset/www/cordova.js:292:54)
Console: at processMessage (file:///android_asset/www/cordova.js:1029:21)
Console: at Function.processMessages (file:///android_asset/www/cordova.js:1063:13)
Console: at pollOnce (file:///android_asset/www/cordova.js:933:17) at file:///android_asset/www/cordova.js:1036
------ Mise à JOUR 2014-04-07 -------------
Dans la fin, nous avons utilisé une approche alternative pour résoudre le problème. Google a développé un plugin natif pour Android et iOS - https://github.com/MobileChromeApps/zip
C'est assez simple, et honnêtement l'un des rares plugins que nous avons utilisé, qui a réussi à faire ce que nous avions besoin sur le premier essai.
Exemple:
zip.unzip("cdvfile://localstorage/downloaded.zip",
"cdvfile://localstorage/my_data/path/",
function(){
console.log('Zip decompressed successfully');
}
);
PS: Cordova a depuis été mis à jour à 3.4.0 - Ma question initiale utilisé les chemins comme file:///android_asset/www
qui a été remplacé par le nouveau cdvfile://
Salut @QuickFix, oui, j'ai. Le fichier essaie de décompresser a d'abord été téléchargé à partir de l'adresse HTTP, alors ce script prend le dessus et décompressez-le.
Avez-vous fait des progrès sur ce point ?
Merci, je vais essayer!!!!
si vous avez résolu s'il vous plaît ajouter que répondre et il marque avec réponse sélectionnée. Merci
OriginalL'auteur James Wong | 2014-01-24
Vous devez vous connecter pour publier un commentaire.
-- COPIE DE MON EDIT AU DESSUS--
Dans la fin, nous avons utilisé une approche alternative pour résoudre le problème. Google a développé un plugin natif pour Android et iOS - https://github.com/MobileChromeApps/zip
C'est assez simple, et honnêtement l'un des rares plugins que nous avons utilisé, qui a réussi à faire ce que nous avions besoin sur le premier essai.
Exemple:
PS: Cordova a depuis été mis à jour à 3.4.0 - Ma question initiale utilisé les chemins comme
file:///android_asset/www
qui a été remplacé par le nouveaucdvfile://
Nous avons été à l'aide de Galaxy Tab 2 et un Nexus 5. Nous n'avons pas de taille de fichier, à environ 90-120 MO contenant une vidéo autour de ~80 MO et quelques petites JPG et HTML. Prend environ 3-4 minutes pour décompresser. Lecture/ écriture effectuée à partir de la Carte SD pour la Tab 2.
Eh bien, je suppose que mon problème de performance est due au nombre de fichiers: environ 50.000 très petit format JPG (carreaux de la carte).
Cela renvoie toujours
-1
n'a plus besoin. J'ai fini par écrire mon propre plugin. Fonctionne parfaitement.
OriginalL'auteur James Wong