Nodejs zlib 库,怎么压缩多个 Buffer
Nodejs zlib 库,怎么压缩多个 Buffer
因为要做阿里云 oss 文件批量压缩下载 目前 OSS 文件已经下载为 Buffer 数据
但是目前好像没有找到方法能 gzip 压缩多个文件
const result = data['source-files'].map(item=>client.get(item))
Promise.all(result).then(res=>{
resp.setHeader('content-type', 'gzip');
resp.send(Buffer.from(zlib.gzipSync(res[0].content)))
},err=>{
resp.send('fail');
}).catch(err=>{
resp.send('fail');
})
另外,下载下来的 GZIP 里的文件名也没有找到方法可以定义,求问有没有老哥有这方面经验的
gzip 本来就不是压缩多个文件用的
gzip 不是 zip 文件格式
只能压缩单个文件或者 Buffer/流
如果要压缩多个文件 一般先 tarball 打包 然后再 gzip
如果不想按照 tar 来打包 你也可以自己打包多个文件
比如直接把所有 buffer 拼接在一起再 gzip 然后存一下文件名和 offset 就好
好的吧,我试试其他的库
感谢回复
建议一步到位用 tar+xz 或者 tar+zstd
如果是给用户下载用的 建议用 zip 或者 tar+gzip (tgz)
如果面向普通或者企业客户用 zip 比较好
如果面向开发者或者工程师 tgz 比较好
如果是自己内部用的 要压缩率不在乎时间用 tar+xz 要速度不在乎压缩率用 tar+zstd
如果是给客户 还是 zip 或者 tgz 比较好 你看 gitlab/github 都提供这样的
目前用的是 adm-zip 压缩的 ZIP 包,面向客户的比较友好一点哈哈
在 Node.js 中,你可以使用 zlib
库来压缩多个 Buffer。zlib
提供了多种压缩和解压缩方法,比如 gzip
、deflate
和 deflateRaw
等。为了压缩多个 Buffer,你可以将它们合并成一个,然后再进行压缩。以下是一个示例代码,展示了如何合并多个 Buffer 并使用 zlib.deflate
方法进行压缩:
const zlib = require('zlib');
// 示例 Buffer 数组
const buffers = [
Buffer.from('Hello, '),
Buffer.from('world!'),
Buffer.from(' This is a test.')
];
// 合并多个 Buffer
const mergedBuffer = Buffer.concat(buffers);
// 使用 zlib.deflate 压缩 Buffer
zlib.deflate(mergedBuffer, (err, result) => {
if (err) {
console.error('压缩失败:', err);
return;
}
console.log('压缩后的 Buffer:', result);
// 如果需要,可以将压缩后的 Buffer 转换为字符串(例如 Base64 编码)
const compressedString = result.toString('base64');
console.log('压缩后的 Base64 字符串:', compressedString);
});
在这个示例中,我们首先使用 Buffer.concat
方法将多个 Buffer 合并成一个。然后,我们使用 zlib.deflate
方法对合并后的 Buffer 进行压缩。压缩完成后,你可以将结果存储或传输。如果需要,你还可以将压缩后的 Buffer 转换为字符串(例如使用 Base64 编码),以便更容易地存储或传输。
希望这个示例能帮助你理解如何在 Node.js 中使用 zlib
库压缩多个 Buffer。