Nodejs и файл обновления внутри zip-архива - PullRequest
0 голосов
/ 16 марта 2019

Я хочу обновить файл в zip-архиве с nodejs. Например, у меня есть 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.txt или b.txt

1 Ответ

2 голосов
/ 16 марта 2019

Присоединение к существующему архиву в настоящее время невозможно с archiver.Вот соответствующая проблема: https://github.com/archiverjs/node-archiver/issues/23

В вашем случае append добавляет к потоку , а не к тому, что было в месте назначения нового файла.archiver не заботится о том, что находится на a.zip, он просто перезаписывает все, что вы даете archiver.append.

РЕДАКТИРОВАТЬ: кажется, что вам лучше всего распаковать существующий файл с https://github.com/maxogden/extract-zip, затем добавьте результаты в новую версию архива с помощью archiver.

...