Comment télécharger et décompresser un fichier zip dans la mémoire en NodeJs?

Je veux télécharger un fichier zip à partir de l'internet et décompressez-le dans la mémoire sans l'enregistrer dans un fichier temporaire. Comment puis-je faire cela?

Voici ce que j'ai essayé:

var url = 'http://bdn-ak.bloomberg.com/precanned/Comdty_Calendar_Spread_Option_20120428.txt.zip';

var request = require('request'), fs = require('fs'), zlib = require('zlib');

  request.get(url, function(err, res, file) {
     if(err) throw err;
     zlib.unzip(file, function(err, txt) {
        if(err) throw err;
        console.log(txt.toString()); //outputs nothing
     });
  });

[MODIFIER]
Comme, a suggéré, j'ai essayé d'utiliser le sma-zip bibliothèque et je ne peux toujours pas faire ce travail:

var ZipEntry = require('adm-zip/zipEntry');
request.get(url, function(err, res, zipFile) {
        if(err) throw err;
        var zip = new ZipEntry();
        zip.setCompressedData(new Buffer(zipFile.toString('utf-8')));
        var text = zip.getData();
        console.log(text.toString()); //fails
    });
  • Notez bien que zlib ne gère pas les zip format de fichier, il ne gère que gzip et deflate formats. Le zlib.unzip fonction est faussement nommé, car il ne décompresse gzip et deflate formats. Vous avez besoin d'un format zip bibliothèque.
  • Cette zipfile semble prometteuse github.com/springmeyer/node-zipfile/blob/master/README.md
  • En fait, zlib occupe également de la zlib format (qui à son tour utilise dégonfler). Mais c'est totalement hors de propos ici, donc +1 🙂
  • Double Possible. stackoverflow.com/questions/2095697/...
  • Votre deuxième exemple de la modification à l'aide de request.get qui appelle automatiquement toString() sur les données renvoyées. Mais adam-zip nécessite un Buffer pas un String. Utilisation request({url: url, encoding: null}, function(err, res, zipFile) { ... au lieu de request.get de faire request retour d'un Buffer. (Bien que quand je l'ai fait j'ai eu un CRC32 checksum failed erreur 🙁 Vous devriez vraiment juste sauter request et l'utilisation mihai la réponse ci-dessous.
InformationsquelleAutor pathikrit | 2012-04-28