Adm Zip将文件压缩为目录

时间:2015-10-23 06:51:51

标签: javascript node.js zip adm-zip

我正在尝试使用Adm-Zip

将文件打包成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);

但是,所有文件都将作为文件夹添加到zip中,并且实际内容不会被压缩。

Screenshot

入门参考如下,这似乎是一个非常简单的例子,它没有按预期工作。我究竟做错了什么? https://github.com/cthackers/adm-zip/wiki/ADM-ZIP-Introduction

3 个答案:

答案 0 :(得分:14)

所以我做了一些挖掘: https://github.com/cthackers/adm-zip/blob/master/adm-zip.js#L275

addFile最终由addLocalFile调用,这似乎是发生错误的地方,特别是line 281,它检查ZipEntry是否是一个目录。正在应用错误的标志。

为了解决这个问题,我最终手动调用了addFile并自己指定了属性,这样它就不会依赖于自动检测并错误地将文件标记为目录。

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

要自己获取fileBuffer,您可以使用fs.readFilefs.readFileSync

答案 1 :(得分:0)

var zip = new admZip();
var fs=require('fs-extra');
zip.addFile('NGINX/app.js',fs.readFileSync('./app.js'),'',0644);
zip.writeZip("./files.zip");

答案 2 :(得分:-1)

来自adm-zip的wiki

  

[void] addLocalFile(String localPath,String zipPath)

将磁盘中的文件添加到存档中。

  

[void] addLocalFolder(String localPath,String zipPath)

将本地目录及其所有嵌套文件和目录添加到存档

因为看起来你错过了第二个参数,即zipPath。