在将数据写入nodejs时是否可以压缩数据?

时间:2019-09-24 13:52:17

标签: node.js stream zip zlib

我能够将数据附加到这样的文件中

行(我会得到的)

 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 个答案:

答案 0 :(得分:1)

我不知道是否可以在不重写的情况下附加到.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;
  })
})

答案 1 :(得分:0)

我不确定这是否行得通,但也许会对您有所帮助。

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