Je veux créer une archive zip et décompresser une archive dans node.js. Je ne trouve aucune implémentation de nœud. S'il vous plaît aider.
Réponses
Trop de publicités?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 n'ai testé cela que sur Mac OS X Lion, mais je suppose que cela fonctionnera parfaitement sous Linux et Windows sur lesquels Cygwin est 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);
Si vous avez seulement besoin d'unzip, node-zipfile semble être moins lourd que node-archive . Il a certainement une courbe d'apprentissage plus petite.
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 l’apprentissage d’une bibliothèque comme celle mentionnée par Emmerman