节点 Zlib。使用内存中的文件结构解压缩响应

Node Zlib. Unzip response with file structure in-memory

我正在从文件中的数据响应中接收缓冲区 data

// Save it just to check if content is correct
const fd = fs.openSync('data.zip', 'w')
fs.writeSync(fd, data)
fs.closeSync(fd)

生成文件 data.zip,其中包含文件 foo.csv

我可以在内存中使用 UZIP 解压它:

const unzipArray = UZIP.parse(data)['foo.csv']

但是,我不能用 Zlib 做到这一点。

const unzipArray = zlib.unzipSync(data)
// Rises: incorrect header check

Zlib 似乎无法解析文件结构。

如何使用 Zlib 将上述缓冲区内存解压缩,而不将文件保存到文件系统?

对于单个文件:

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

const fileContents = fs.createReadStream('./data/file1.txt.gz');
const writeStream = fs.createWriteStream('./data/file1.txt');
const unzip = zlib.createGunzip();

fileContents.pipe(unzip).pipe(writeStream);

一组文件:

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

const directoryFiles = fs.readdirSync('./data');

directoryFiles.forEach(filename => {
  const fileContents = fs.createReadStream(`./data/${filename}`);
  const writeStream = fs.createWriteStream(`./data/${filename.slice(0, -3)}`);
  const unzip = zlib.createGunzip();
  fileContents.pipe(unzip).pipe(writeStream);
});

您有一个 zip 文件,而不是 zlib 或 gzip 流。如您所见,zlib 不处理 zip 文件。 node.js 有很多解决方案,您可以通过朋友 google 找到这些解决方案。这里是 one.