Search code examples
javascriptnode.jszipadm-zip

Adm Zip zipping files as directories


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


Solution

  • 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