Search code examples
node.jszip

Simplest way to download and unzip files in Node.js cross-platform?


Just looking for a simple solution to downloading and unzipping .zip or .tar.gz files in Node.js on any operating system.

Not sure if this is built in or I have to use a separate library. Any ideas? Looking for just a couple lines of code so when the next zip file comes that I want to download in node, it's a no brainer. Feel like this should be easy and/or built in, but I can't find anything. Thanks!


Solution

  • Node has builtin support for gzip and deflate via the zlib module:

    var zlib = require('zlib');
    
    zlib.gunzip(gzipBuffer, function(err, result) {
        if(err) return console.error(err);
    
        console.log(result);
    });
    

    Edit: You can even pipe the data directly through e.g. Gunzip (using request):

    var request = require('request'),
        zlib = require('zlib'),
        fs = require('fs'),
        out = fs.createWriteStream('out');
    
    // Fetch http://example.com/foo.gz, gunzip it and store the results in 'out'
    request('http://example.com/foo.gz').pipe(zlib.createGunzip()).pipe(out);
    

    For tar archives, there is Isaacs' tar module, which is used by npm.

    Edit 2: Updated answer as zlib doesn't support the zip format. This will only work for gzip.