节点 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.
我正在从文件中的数据响应中接收缓冲区 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.