gpt4 book ai didi

javascript - Un-TAR 和 un-GZip 文件存储为 JavaScript 缓冲区

转载 作者:行者123 更新时间:2023-12-03 12:17:33 26 4
gpt4 key购买 nike

我正在 Node.js/Express.js 上开发一个服务器脚本,它接收上传的包含多个文件的 .tar.gz 文件。该脚本必须解压和解压缩存档中的 CSV 文件,解析它们并将一些存储在数据库中。不需要在服务器上存储文件,只需要处理它们。要上传文件,我使用 Multer 而不指定文件的存储位置,因此文件上传仅在 req.files 中作为 Buffer 可用。

我的问题是,如何解压和解压缩 Buffer 以获取文件的内容?如果我做类似的事情:

const { unzipSync } = require('zlib');

const zipped = req.files[0];
const result = await unzipSync(zipped.buffer);
const str = result.toString('utf-8');

我得到的不是文件的内容,而是所有信息,包括文件名、一些元数据等,都是字符串形式,这很难解析。有没有更好的办法?

最佳答案

我设法使用 tar-stream 解压和解压缩 Buffer和 streamifier图书馆。

const tar = require('tar-stream');
const streamifier = require('streamifier');
const { unzipSync } = require('zlib');

const untar = ({ buffer }) => new Promise((resolve, reject) => {
// Buffer is representation of .tar.gz file uploaded to Express.js server
// using Multer middleware with MemoryStorage
const textData = [];
const extract = tar.extract();
// Extract method accepts each tarred file as entry, separating header and stream of contents:
extract.on('entry', (header, stream, next) => {
const chunks = [];
stream.on('data', (chunk) => {
chunks.push(chunk);
});
stream.on('error', (err) => {
reject(err);
});
stream.on('end', () => {
// We concatenate chunks of the stream into string and push it to array, which holds contents of each file in .tar.gz:
const text = Buffer.concat(chunks).toString('utf8');
textData.push(text);
next();
});
stream.resume();
});
extract.on('finish', () => {
// We return array of tarred files's contents:
resolve(textData);
});
// We unzip buffer and convert it to Readable Stream and then pass to tar-stream's extract method:
streamifier.createReadStream(unzipSync(buffer)).pipe(extract);
});

使用这种方法,我设法避免在文件系统上存储任何临时文件,并专门处理内存中的所有文件内容。

关于javascript - Un-TAR 和 un-GZip 文件存储为 JavaScript 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59169497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com