阿里云使用云函数实现打包下载OSS文件

/ 0评 / 0

问题

最近需要对用户开放文件批量下载,经过对成本和带宽流量的综合考虑,选择了将文件放在阿里云的OSS上。但是涉及到批量下载问题时,OSS似乎并没有提供打包的方法。

对于问题提出了多种方案,但是均否定:

解决思路

利用阿里云云函数功能,在阿里云内网对文件批量压缩后上传到OSS并且回传文件流

准备工作

免费开通函数计算
免费开通对象存储 OSS

部署

clone工程

git clone https://github.com/awesome-fc/zip-oss.git

安装 funcraft

funcraft 安装配置指引

配置 funcraft

运行 fun config 依次配置 Account ID、Access Key Id、Secret Access Key、 Default Region Name

打开zip-oss项目并部署

函数的配置在template.yml文件中推荐不要修改
<code> event.json 为基础请求实例,可以参考。
执行 <code> fun deploy 部署函数到线上,部署时可选部署区域等信息。

测试

<code> fun deploy 执行后会返回函数的URL

我们可以通过对该url进行post请求获得文件流

请求参数

<code> event.json 为基础请求实例

{
  "region": "cn-shanghai",
  "bucket": "bullet001",
  "source-dir": "zip/test/"
}

除此之外还有另外两个请求参数,具体描述如下

{
  "region": "cn-shanghai",                          // OSS所在区域
  "bucket": "bullet001",                              // OSS Bucket名称
  "source-dir": "zip/test/",                          // 需要打包的文件所在目录
  "source-files": ["zip/test/event.json"],     // 需要打包的文件key列表 (可选,若不传则打包整个目录)
  "dest_file": 'output/zip-temp.zip'            // 打包后的文件所在地址
}

发送请求

linux curl:

cat <<EOF > event.json
{
  "region": "cn-hangzhou",
  "bucket": "fc-test-tianlong-wu",
  "source-dir": "files/"
}
EOF

curl -v -L -o /tmp/my.zip -d @./event.json https://123456789.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/zip-service/zip-oss/

postman(返回内容为zip的文件流)

参考文章

具体实现细节可以查看参考文章。
使用函数计算打包下载OSS文件
Funcraft

发表回复

您的电子邮箱地址不会被公开。