zhaohang88 / start-zip-oss

使用函数计算zip打包下载OSS文件

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

start-zip-oss 帮助文档

快速部署zip打包下载OSS文件应用到阿里云函数计算

部署 & 体验

应用详情

需求

打包下载 OSS 上存储的多个文件,例如将OSS上的一个目录打包下载。这样可以节省网络传输的数据,达到减少费用和下载时间的效果。

调用函数

应用部署成功后, 会输出 HTTP trigger 对应的公网访问地址

  1. 在OSS上准备要打包的文件, OSS 和 应用函数在同一个 region

    • 把文件放在OSS上面一个目录下面, 比如 files目录
  2. 触发函数(通过HTTP trigger 对应的公网访问地址)

    • 使用curl命令直接调用函数
cat <<EOF > event.json
{
  "bucket": "fc-test-bucket",
  "source-dir": "files/"
}
EOF

curl -v -L -o /tmp/my.zip -d @./event.json https://zip-oss-func-zip-oss-xxxx.cn-shanghai.fcapp.run

打开/tmp/my.zip,就是files/目录下所有文件的压缩包。

注意, 如果您有需求将上面的示例中的匿名非鉴权的 HTTP 函数改成需要鉴权的 HTTP 函数,可以采用相关的 sdk 去调用

方案

使用函数计算先把多个文件压缩成一个 zip,存储到 OSS上面,返回 zip 文件的地址,客户端下载此文件。一般的客户端都支持跟随 HTTP 302 跳转地址,所以在完成压缩后,返回一个302的地址,客户端再跟随这个地址下载压缩后的文件包。

zip_oss_high

实现细节

  1. 函数运行环境的磁盘空间是有限的,采用流式下载和上传的方式,只在内存中缓存少量的数据
  2. 为了加快速度,一边生成zip文件时一边上传到OSS
  3. 上传zip文件到OSS时,利用OSS分片上传的特性,多线程并发上传

zip_oss_low

实验数据

# 文件数 压缩前总大小 压缩后总大小 执行时间
1 7 1.2MB 1.16MB 0.4s
2 57 1.06GB 0.91GB 63s

通过 Serverless Devs 开发者工具,您只需要几步,就可以体验 Serverless 架构,带来的降本提效的技术红利。

开发者社区

您如果有关于错误的反馈或者未来的期待,您可以在 Serverless Devs repo Issues 中进行反馈和交流。如果您想要加入我们的讨论组或者了解 FC 组件的最新动态,您可以通过以下渠道进行:

微信公众号:`serverless` 微信小助手:`xiaojiangwh` 钉钉交流群:`33947367`

About

使用函数计算zip打包下载OSS文件

License:MIT License


Languages

Language:Python 100.0%