NodeJs实现OSS文件批量压缩并下载(通过数据流,不压盘)

发布于 2022-01-20  65 次阅读


前言

前两天根据阿里云的文档和开源Python代码实现了OSS文件压缩下载,但是实现的方式是压缩存储在阿里云OSS上并返回302重定向OSS链接。

这样做优点是快捷简单,但会导致每次请求都会产生一个多余的文件占用OSS空间,并且大量文件碎片管理起来也有问题(目前可以通过统一文件命名并设置生命周期的方式自动删除),并且压缩的效率并不高。

具体可见: 阿里云使用云函数实现打包下载OSS文件

重新实现

目前自己通过Nodejs重新实现了这个功能,在文件打包后直接返回打包后的数据流。

不压盘存储不占用数据存储空间,并且压缩率有了质的提升,一般文件都能压缩到一半大小左右。

目前已开源,可见:moke8/ali-fun-oss-zip

使用方法

  1. 下载代码包 git clone https://github.com/moke8/ali-fun-oss-zip.git
  2. 安装依赖 npm install
  3. 将index.js中client信息改为自己的阿里云key和secret

部署方法

第一种:使用Funcraft

如果你未安装可以安装下面顺序安装。

  1. 安装Funcraft npm install @alicloud/fun -g
  2. 配置 fun config
  3. 本地调试 fun local start
  4. 发布到阿里云 fun deploy

第二种:直接上传

也可以直接打包压缩上传到阿里云云函数的函数空间中

调用方法

POST传参

{
    "region": "cn-shanghai",  // 文件所在区域,默认为当前函数所在区域
    "bucket": "bullet001", // 文件所在的bucket
    "source-files": [
        "bill/pay/1.00_S865054.pdf"
    ] // OSS路径文件列表
}

一个爱搞事情的前端,一个爱玩技术的程序员