Reputation: 4696
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.
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
Upvotes: 16
Views: 20989
Reputation: 370
var zip = new admZip();
var fs=require('fs-extra');
zip.addFile('NGINX/app.js',fs.readFileSync('./app.js'),'',0644);
zip.writeZip("./files.zip");
Upvotes: 2
Reputation: 326
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
Upvotes: 16
Reputation: 2680
From the wiki of adm-zip:
[void] addLocalFile(String localPath, String zipPath)
Adds a file from the disk to the archive.
[void] addLocalFolder(String localPath, String zipPath)
Adds a local directory and all its nested files and directories to the archive
As it seems you miss the second parameter that is the zipPath.
Upvotes: 1