Node.js和zip存档中的更新文件

时间:2019-03-15 23:07:19

标签: javascript node.js filesystems zip ziparchive

我想用nodejs更新zip档案中的文件。例如,我有两个文件的zip文件:

 a.zip
   |-a.txt
   |-b.txt 

我使用存档器:

var archiver = require('archiver');
var archive = archiver('zip', {});
archive.pipe(fs.createWriteStream('./a.zip'));
archive.append(fs.createReadStream('./c.txt'), { name: 't.txt' });
archive.finalize();

但是我有一个问题,我的存档已被完全覆盖。结果,我得到:

 a.zip
   |-t.txt

如果我使用:

archive.file('./a.txt', { name: 't.txt' });

结果保持不变。 我想得到这样的结构

 a.zip
   |-a.txt
   |-b.txt
   |-t.txt

或更新文件a.txtb.txt之一的内容

1 个答案:

答案 0 :(得分:2)

archiver当前无法添加到现有存档。这是相关的问题:https://github.com/archiverjs/node-archiver/issues/23

在您的情况下,append附加到上,而不附加到新文件目标位置上。 archiver不在乎a.zip的内容,它只是将您提供给archiver.append的内容覆盖掉。

编辑:似乎最好的选择是使用https://github.com/maxogden/extract-zip解压缩现有文件,然后使用archiver将结果附加到新版本的存档中。