Prakash
Prakash

Reputation: 336

How to convert multiple files as zip in nodejs?

Here my code:

So someone help how to dowload the files as a zip folder

exports.downloadAllFiles = function(req,res){
    demodb.findOne({ guid: req.params.id }, function(err, data) { 
        if (err) {
            console.log("Error in finding case....");
            res.json(HttpStatus.INTERNAL_SERVER_ERROR, {});
        } else {
            if(data){
                // Here multiple files are contained in the data array
                //So I need to download the files into a zip folder
            }
        }
    })
    };

Upvotes: 1

Views: 3872

Answers (3)

vishal sharma
vishal sharma

Reputation: 190

var AdmZip = require('adm-zip');
    var zip = new AdmZip();
    var fs=require('fs-extra');
    let arr = ['AKTU.pdf', 'test1.pdf']
    for(let i = 0 ;i<arr.length ;i++){
      zip.addLocalFile(`./createZip/${arr[i]}`); //local path
    }
    zip.writeZip("./files.zip");

You can use this code to add multiple files in a zip.

Upvotes: 0

HIRA THAKUR
HIRA THAKUR

Reputation: 17757

You can do this using ADM-ZIP

    const zip=require('adm-zip');
    var zipper = new zip();
    zipper.addLocalFile('1.csv');
    zipper.addLocalFile('2.csv');
    zipper.addLocalFile('3.csv');
    zipper.writeZip("123.zip");

Upvotes: 3

iLuvLogix
iLuvLogix

Reputation: 6430

Here's a small example of adm-zip on how to add files directly, from local directory and buffer:

// creating archives
var zip = new AdmZip();

// add file directly
zip.addFile("test.txt", new Buffer("inner content of the file"), "entry comment goes here");
// add local file
zip.addLocalFile("/home/me/some_picture.png");
// get everything as a buffer
var willSendthis = zip.toBuffer();
// or write everything to disk
zip.writeZip(/*target file name*/"/home/me/files.zip");

In your case you can add files in a for loop iterating through the array and adding a file in each recursion.

exports.downloadAllFiles = function(req,res){
demodb.findOne({ guid: req.params.id }, function(err, data) { 
    if (err) {
        console.log("Error in finding case....");
        res.json(HttpStatus.INTERNAL_SERVER_ERROR, {});
    } else {
        if(data){
            // for loop goes here:
            for(var i =0; i<data.length; i++){
              // add the files to zip
            }                
        }
    }
})
};

Upvotes: 2

Related Questions