Cherple Cherple - 1 month ago 35
Javascript Question

Extracting zipped files using JSZIP in javascript

In my webpage, a user is supposed to upload a zipped file. Within the zipped file are 2 files: another zip file and a txt file. On my server, after receiving the zip, I want to unzip the zip file to extract the zip & txt file, then move those 2 files to a predefined folder. I have a piece of code that extracts the zip file, but the data doesn't seem correct. Firstly, it unzipped a zip and 2 txt file when there should only be 1 txt file. It created an additional 'undefined' txt file. Also, in my txt file, instead of the original data, it was replaced with the following text: '[undefined] [undefined]'.

Can anyone help me on this? The following is my code:

var JSZip = require('JSZip');

fs.readFile{ filePath, function(err, data){
if (!err){
var zip = new JSZip();
JSZip.loadAsync(data).then(function(zip){
object.keys(zip.files).forEach(function(filename){
var content = zip.files[filename];
var dest = path + filename;
fs.writeFileSync(dest, content);
});
});
}
});

Answer

It took a bit of digging in their documentation but they have an example that shows how to read the file contents from a ZIP.

You are getting the object that describes the ZIP contents but not the actual content. Here is an adjusted version:

var JSZip = require('JSZip');

fs.readFile{ filePath, function(err, data){
  if (!err){
    var zip = new JSZip();
    zip.loadAsync(data).then(function(contents){
      object.keys(contents.files).forEach(function(filename){
        zip.files(filename).async('nodebuffer').then(function(content) {
        var dest = path + filename;
        fs.writeFileSync(dest, content);
        }); 
      });
    });
  }
});
Comments