V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mokevip
V2EX  ›  Node.js

nodejs zlib 库,怎么压缩多个 Buffer

  •  
  •   mokevip · 2022-01-19 16:29:17 +08:00 · 6586 次点击
    这是一个创建于 1073 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    yyfearth
        1
    yyfearth  
       2022-01-19 16:33:14 +08:00
    gzip 本来就不是压缩多个文件用的
    gzip 不是 zip 文件格式
    只能压缩单个文件或者 Buffer/流

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

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

    @ysc3839 如果是自己内部用的 要压缩率不在乎时间用 tar+xz 要速度不在乎压缩率用 tar+zstd
    如果是给客户 还是 zip 或者 tgz 比较好 你看 gitlab/github 都提供这样的
    mokevip
        6
    mokevip  
    OP
       2022-01-20 10:08:03 +08:00
    @yyfearth @ysc3839 目前用的是 adm-zip 压缩的 ZIP 包,面向客户的比较友好一点哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2578 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:05 · PVG 13:05 · LAX 21:05 · JFK 00:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.