Adm Zip zipping files as directories

shashi picture shashi · Oct 23, 2015 · Viewed 13.7k times · Source

I am trying to pack files into a zip file using Adm-Zip

var AdmZip = require('adm-zip');

var pathToZip = 'build/release/Ext.zip';


var zip = new AdmZip();

zip.addLocalFile('background.js');
zip.addLocalFile('chrome_ex_oauth.html');
zip.addLocalFolder('images');
zip.writeZip(pathToZip);

However, all the files are getting added as folders inside the zip and the actual content is not getting zipped.

Screenshot

The Getting Started reference is below and this seems to be a very simple example which is not working as expected. What am I doing wrong? https://github.com/cthackers/adm-zip/wiki/ADM-ZIP-Introduction

Answer

Speedy picture Speedy · Mar 14, 2016

So I did some digging: https://github.com/cthackers/adm-zip/blob/master/adm-zip.js#L275

addFile is ultimately called by addLocalFile, and that seems to be where the error is occurring, specifically on line 281 where it checks if the ZipEntry is a directory. The wrong flags are getting applied.

To get around this, I ended up calling addFile manually and specified the attributes myself, so that it wouldn't rely on auto-detection and incorrectly flag files as directories.

addFile(filePathInArchive, fileBuffer, '', 0644 << 16);

To get a fileBuffer yourself, you can use fs.readFile or fs.readFileSync