comment convertir plusieurs fichiers en un fichier zip compressé à l’aide du noeud js

Je veux convertir plusieurs fichiers en un fichier zip compressé sur node.js.

J’ai essayé le code suivant:

var archiver = require('archiver'); var fs = require('fs'); var SsortingngStream = require('ssortingng-stream'); http.createServer(function(request, response) { var dl = archiver('data'); dl.pipe(response); dl.append(new fs.createReadStream('test/fixtures/test.txt'), { name: 'stream.txt', date: testDate2 }); dl.append(new SsortingngStream("Ooh dynamic stuff!"), { name : 'YoDog/dynamic.txt' }); dl.finalize(function(err) { if (err) res.send(200000) }); }).listen(3500); 

Il existe une solution beaucoup plus simple avec le module archiver :

 var fs = require('fs'); var archiver = require('archiver'); var output = fs.createWriteStream('./example.zip'); var archive = archiver('zip', { gzip: true, zlib: { level: 9 } // Sets the compression level. }); archive.on('error', function(err) { throw err; }); // pipe archive data to the output file archive.pipe(output); // append files archive.file('/path/to/file0.txt', {name: 'file0-or-change-this-whatever.txt'}); archive.file('/path/to/README.md', {name: 'foobar.md'}); // archive.finalize(); 

Il supporte également les archives tar , il suffit de remplacer “zip” par “tar” à la ligne 4.

Je n’ai aucun crédit pour ce code, il fait simplement partie du fichier README (vous devriez vérifier s’il existe d’autres moyens d’append des éléments dans les archives).

Paquet soigné, et c’est probablement le seul qui est encore maintenu et documenté correctement.

Pour compresser plusieurs fichiers, vous pouvez utiliser cette méthode utilitaire que j’ai écrite avec le module d’archivage: –

 var zipLogs = function(working_directory) { var fs = require('fs'); var path = require('path'); var output = fs.createWriteStream(path.join(working_directory, 'logs.zip')); var archiver = require('archiver'); var zipArchive = archiver('zip'); zipArchive.pipe(output); zipArchive.bulk([{src: [path.join(working_directory, '*.log')], expand: true}]); zipArchive.finalize(function(err, bytes) { if (err) throw err; console.log('done:', base, bytes); }); } 

Cela permet, par exemple, de compresser tous les fichiers journaux d’un répertoire particulier.