Search code examples
node.jsunzipcloudinary

Download Unzip Upload clodinary


I am trying to download a ZIP file with request pipe it to node-unzip then pipe it to cloudinary.

var stream = cloudinary.uploader.upload_stream(function(result) {
  console.log(result)
});

request(file_url).pipe(unzip.Parse()).pipe(stream); //<-- This do not work!
ERROR: { error: { message: 'Empty file', http_code: 400 } }

fs.createReadStream('my_picture.jpg').pipe(stream); //<-- This works!

Solution

  • (You didn't mention, but I'm assuming your request var is an instance of request)

    First check that your zip is valid and contains what you expect it to:

    (code taken from node-unzip's readme)

    var unzip = require('unzip');
    var request = require('request');
    var fstream = require('fstream');
    var writeStream = fstream.Writer('output/path');
    
    request(file_url)
      .pipe(unzip.Parse())
      .pipe(writeStream);
    

    Then, send a single entry from a zip (even if there is only one):

    var cloudinary = require('cloudinary');
    var unzip = require('unzip');
    var request = require('request');
    var stream = cloudinary.uploader.upload_stream(function(result) {
      console.log(result)
    });
    request(file_url)
      .pipe(unzip.Parse())
      .on('entry', function (entry) {
        var fileName = entry.path;
        var type = entry.type; // 'Directory' or 'File'
        var size = entry.size;
        if (fileName === "your_image.png") {
          entry.pipe(stream);
        } else {
          entry.autodrain();
        }
      });