Можно ли заархивировать данные при записи данных в nodejs? - PullRequest
0 голосов
/ 24 сентября 2019

Я могу добавить данные в файл, подобный этой

строке (это я получу)

 fs.appendFile('./file.txt', JSON.stringify(row) + '\n', (err) => {
      if (err) throw err;
    });

Но как я могу "добавить" данные при архивировании их нато же время ?Я не уверен, если это возможно, если да, любые указатели будут чрезвычайно полезны.Могу ли я достичь этого с помощью трубопровода?если да как?

zip.appendData('./file.zip',JSON.stringify(row) + '\n', (err) => {
          if (err) throw err;
        });

Что-то вроде выше?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Я не знаю, возможно ли добавить файл .zip в архив без перезаписи.

Если рассматривается файл .gz, вы можете использовать встроенный zlib* Модуль 1007 * для добавления непосредственно в файл .gz.

const zlib = require('zlib');

zlib.gzip(JSON.stringify(row), (err, data) => {
  if (err) throw err;
  fs.appendFile('file.txt.gz', data, err => {
    if (err) throw err;
  })
})
0 голосов
/ 24 сентября 2019

Я не уверен, что это сработает, но, возможно, вам поможет.

Вам нужен пакет zlib для вашего проекта

npm install zlib

Код:

const fs = require('fs');
const zlib = require('zlib');

function WriteAndZip(filename) {
    return new Promise(async function (resolve, reject) {
        fs.appendFile(`./your_path/${filename}`, JSON.stringify(row) + '\n', (err) => {
            if (err) throw err;
        });
        const fileContents = fs.createReadStream(`./your_path/${filename}`);
        const writeStream = fs.createWriteStream(`./your_path/${filename}.gz`);
        const zip = zlib.createGzip();
        fileContents.pipe(zip).pipe(writeStream).on('finish', (err) => {
            if (err) return reject(err);
            else resolve();
        });
    });
}
...