Je veux créer une archive zip et la décompresser dans node.js. Je ne trouve aucune implémentation de nœud. S’il vous plaît aider.
J’ai fini par le faire comme ça (j’utilise Express). Je crée un fichier ZIP contenant tous les fichiers d’un répertoire donné (SCRIPTS_PATH).
Je l’ai seulement testé sur Mac OS X Lion, mais je suppose que ça fonctionnera très bien sous Linux et Windows avec Cygwin installé.
var spawn = require('child_process').spawn; app.get('/scripts/archive', function(req, res) { // Options -r recursive -j ignore directory info - redirect to stdout var zip = spawn('zip', ['-rj', '-', SCRIPTS_PATH]); res.contentType('zip'); // Keep writing stdout to res zip.stdout.on('data', function (data) { res.write(data); }); zip.stderr.on('data', function (data) { // Uncomment to see the files being added //console.log('zip stderr: ' + data); }); // End the response on zip exit zip.on('exit', function (code) { if(code !== 0) { res.statusCode = 500; console.log('zip process exited with code ' + code); res.end(); } else { res.end(); } }); });
node-core a des fonctionnalités zip intégrées: http://nodejs.org/api/zlib.html
Utilise les:
var zlib = require('zlib'); var gzip = zlib.createGzip(); var fs = require('fs'); var inp = fs.createReadStream('input.txt'); var out = fs.createWriteStream('input.txt.gz'); inp.pipe(gzip).pipe(out);
Vous pouvez essayer le module npm de node-zip .
Il place JSZip sur le noeud, pour compresser / décompresser les fichiers zip.
Vous pouvez utiliser le module archiveur , cela m’a été très utile, voici un exemple:
var Archiver = require('archiver'), fs = require('fs'); app.get('download-zip-file', function(req, res){ var archive = Archiver('zip'); archive.on('error', function(err) { res.status(500).send({error: err.message}); }); //on stream closed we can end the request res.on('close', function() { console.log('Archive wrote %d bytes', archive.pointer()); return res.status(200).send('OK').end(); }); //set the archive name res.attachment('file-txt.zip'); //this is the streaming magic archive.pipe(res); archive.append(fs.createReadStream('mydir/file.txt'), {name:'file.txt'}); //you can add a directory using directory function //archive.directory(dirPath, false); archive.finalize(); });
Si vous n’avez besoin que d’unzip, node-zipfile semble être moins lourd que node-archive . Il a définitivement une courbe d’apprentissage plus réduite.
J’ai utilisé ‘archiver’ pour compresser des fichiers. Voici l’un des liens Stackoverflow qui montre comment l’utiliser, lien Stackoverflow pour compresser des fichiers avec archiveur
Si vous ne souhaitez pas utiliser / apprendre une bibliothèque, vous pouvez utiliser node pour contrôler les outils de ligne de commande zip en exécutant des processus enfants.
Bien que je recommande d’apprendre une bibliothèque comme celle mentionnée par Emmerman
adm-zip
C’est une librairie javascript uniquement pour lire, créer et modifier les archives zip en mémoire.
Ca a l’air sympa, mais c’est un petit buggy. J’ai eu du mal à décompresser un fichier texte.
Vous pouvez utiliser le module edge.js qui prend en charge l’interopérabilité entre les processus node.js et .NET, puis appeler la classe ZipFile du framework .NET qui vous permet de manipuler les archives ZIP. Voici un exemple complet de création d’un package ZIP à l’aide de edge.js. Consultez également l’ exemple de décompression à l’aide de edge.js.