我们在 nodejs 中写入数据时是否可以压缩数据?

Is it possible to zip data as we write the data in nodejs?

我可以像这样将数据附加到文件

行(这个我会得到)

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

但是如何在压缩数据的同时 "append" 呢?我不确定这是否可能,如果是的话,任何指示都会非常有帮助。 我可以通过管道实现吗?如果是怎么办?

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

类似上面的内容?

我不确定这是否有效,但也许对你有帮助。

您的项目需要 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();
        });
    });
}

我不知道是否可以在不重写的情况下附加到 .zip 存档。

如果考虑 .gz 文件,您可以使用内置的 zlib 模块直接附加到 .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;
  })
})