I want to create a zip archive and unzip it in node.js.
I can't find any node implementation.
To zip an entire directory using Node. js, we can use the archiver package. const fs = require('fs'); const archiver = require('archiver'); const output = fs. createWriteStream('target.
ADM-ZIP is a pure JavaScript implementation for zip data compression for NodeJS.
I ended up doing it like this (I'm using Express). I'm creating a ZIP that contains all the files on a given directory (SCRIPTS_PATH).
I've only tested this on Mac OS X Lion, but I guess it'll work just fine on Linux and Windows with Cygwin installed.
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 has built in zip features: http://nodejs.org/api/zlib.html
Use them:
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With