Search code examples
node.jsnode.js-stream

node.js, fetch a zip file and unzip it to ram


I need help, how to fetch a zip file and unzip it to memory, or maybe write it to harddisk.

sample url

var http = require("http");
var fs = require("fs");
var url = "http://www.caltrain.com/Assets/GTFS/caltrain/Caltrain-GTFS.zip"
var file = fs.createWriteStream("./file.zip");

http.get(url, (res) => {
    var test = res.pipe(file);
    console.log("it's finished")
    console.log(test)
})

I am not sure how the asycnc-api works, does createWriteStream wait for the whole buffer? and how to write it to disk?

// I find a better solution after hours of googling, How to download and unzip a zip file in memory in NodeJs?


Solution

  • You can use the mentioned packages: request & unzip

    # download and save the file to filesystem
    request('http://google.com/doodle.png').pipe(fs.createWriteStream('file.zip'))
    
    # extract it to `output/path`
    fs.createReadStream('file.zip').pipe(unzip.Extract({ path: 'output/path' }));
    

    Or if you don't need the zip file, you can extract it directly from memory:

    request('http://google.com/doodle.png').pipe(unzip.Extract({ path: 'output/path' }));