nodejs zlib 库,怎么压缩多个 Buffer

2022-01-19 16:29:17 +08:00
 mokevip

因为要做阿里云 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 里的文件名也没有找到方法可以定义,求问有没有老哥有这方面经验的

6432 次点击
所在节点    Node.js
6 条回复
yyfearth
2022-01-19 16:33:14 +08:00
gzip 本来就不是压缩多个文件用的
gzip 不是 zip 文件格式
只能压缩单个文件或者 Buffer/流

如果要压缩多个文件 一般先 tarball 打包 然后再 gzip

如果不想按照 tar 来打包 你也可以自己打包多个文件
比如直接把所有 buffer 拼接在一起再 gzip 然后存一下文件名和 offset 就好
mokevip
2022-01-19 16:42:30 +08:00
@yyfearth 好的吧,我试试其他的库
mokevip
2022-01-19 16:42:38 +08:00
@yyfearth 感谢回复
ysc3839
2022-01-19 20:04:55 +08:00
建议一步到位用 tar+xz 或者 tar+zstd
yyfearth
2022-01-20 07:45:17 +08:00
@mokevip 如果是给用户下载用的 建议用 zip 或者 tar+gzip (tgz)
如果面向普通或者企业客户用 zip 比较好
如果面向开发者或者工程师 tgz 比较好

@ysc3839 如果是自己内部用的 要压缩率不在乎时间用 tar+xz 要速度不在乎压缩率用 tar+zstd
如果是给客户 还是 zip 或者 tgz 比较好 你看 gitlab/github 都提供这样的
mokevip
2022-01-20 10:08:03 +08:00
@yyfearth @ysc3839 目前用的是 adm-zip 压缩的 ZIP 包,面向客户的比较友好一点哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/829265

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX