节点Zlib.解压缩内存中具有文件结构的响应



我从一个文件中包含数据的响应中收到一个Bufferdata

// 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解压缩内存中的上述缓冲区?

您有一个zip文件,而不是zlib或gzip流。正如您所发现的,zlib不处理zip文件。node.js有很多解决方案,你可以使用你的朋友谷歌找到。这是一个。

对于单个文件:

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);
});

最新更新