本文介绍如何使用函数计算将对象存储OSS上多个文件(Object)打包下载到本地。
前提条件
-
已开通函数计算。
您可以在函数计算产品详情页开通函数计算。
-
已授权函数计算访问OSS。
具体步骤,请参见授予函数计算访问其他云服务的权限。
-
已在某个Bucket的指定目录下上传多个文件。本教程以在华东1(杭州)地域的examplebucket下的dir目录中上传多个文件为例。具体步骤,请参见简单上传。
使用原理
当您从OSS中批量下载Object时可能会遇到批量下载不方便、小文件较多时下载缓慢等问题。通过调用函数计算,可以将OSS上的Object先打包,然后将压缩包下载到本地后再解压,实现快速下载批量文件的目的。使用函数计算打包下载OSS文件的流程如下图所示。
-
用户调用函数,并指定存储空间及待压缩的文件。
-
函数计算从OSS中获取指定文件,并生成一个随机名称的ZIP压缩包。
-
函数计算将压缩包上传至OSS。
-
函数计算将ZIP包的下载地址返回给用户。
-
用户使用返回的下载地址从OSS中下载文件。
使用说明
-
函数运行环境的磁盘空间是有限的,所以采用流式下载和上传的方式,只在内存中缓存少量的数据。
-
为了加快速度,函数计算在生成ZIP文件的同时将文件上传到OSS。
-
上传ZIP文件到OSS时,利用OSS分片上传的特性,多线程并发上传。
-
使用函数计算压缩文件时,最大处理时间是24小时(实验数据为57个文件,总大小1.06 GB,处理时间为63s)。
操作步骤
以下以通过函数计算将华东1(杭州)地域examplebucket中dir/目录下的多个文件打包下载到本地为例。
-
部署应用并获取对外公网域名。
使用资源编排ROS一键部署
您可以使用资源编排ROS一键配置部署函数计算应用,并获取对外公网域名。使用资源编排ROS快速部署函数计算应用,并获取对外公网域名的操作步骤如下。
-
打开一键配置模板链接。
-
在资源编排 ROS控制台的使用新资源(标准)页面的配置模板参数页签下,单击创建。
资源栈的资源栈信息页签下的状态显示创建中。
-
资源栈的状态显示创建成功后,单击输出页签,查看对外公网域名。
使用Serverless应用中心一键部署
-
通过Serverless应用中心一键部署应用模板start-zip-oss。
其中,部署类型选择直接部署,应用模板所在地域与Bucket所在地域保持一致,其他选项保留默认配置。配置详情如下图所示。
-
获取对外公网域名。
-
单击结果页签。
-
在triggers字段获取对外公网域名(urlInternet)。
-
使用Serverless Devs命令行工具手动部署
安装Serverless Devs。
curl -o- -L http://cli.so/install.sh | bash
验证是否安装成功。
s -v
成功安装后的执行结果:
@serverless-devs/s: 2.1.1, s-home: /root/.s, linux-x64, node-v14.19.3
-
配置Serverless Devs。
s config add --AccessKeyID LTAI5t7h6SgiLSganP2m**** --AccessKeySecret KZo149BD9GLPNiDIEmdQ7dyNKG**** --access fc-access
参数说明如下:
参数
说明
–AccessKeyID
访问函数计算服务的AccessKey ID。
–AccessKeySecret
访问函数计算服务的AccessKey Secret。
–Access
自定义密钥别名。
-
部署应用模板start-zip-oss。
-
初始化项目。
-
参考以下示例值完成各个配置项。
-
进入项目。
-
部署项目。
-
记录输出结果中返回的system_url。
s init start-zip-oss -d start-zip-oss
配置项
示例值
应用所在的地域
cn-hangzhou
应用所属的函数计算服务
start-zip-oss
应用的函数名称
zip-oss-func
应用所属的函数计算服务配置的RAM角色ARN
acs:ram::137918634953****:role/test-role
cd start-zip-oss
s deploy -y
fc-zip-oss-service: region: cn-hangzhou service: name: start-zip-oss function: name: zip-oss-func runtime: python2.7 handler: main.main_handler memorySize: 3072 timeout: 1800 url: system_url: https://zip-oss-func-start-zip-oss-ayouye****.cn-hangzhou.fcapp.run triggers: - type: http name: http-test
-
-
-
执行以下命令生成event.json文件,并在文件中指定Bucket名称以及待下载的文件所在目录。
cat > event.json <<EOF { "bucket": "examplebucket", "source-dir": "dir/" } EOF
source-dir仅支持指定为Bucket下的某个目录,不支持指定为Bucket根目录。
-
执行以下命令触发函数。
curl -v -L -o /test/oss.zip -d @./event.json https://zip-oss-func-zip-oss-ayouye****.cn-hangzhou.fcapp.run
-
/test/oss.zip:用于存放dir/目录下所有文件的本地路径。
-
https://zip-oss-func-zip-oss-ayouye****.cn-hangzhou.fcapp.run:表示start-zip-oss应用的对外公网域名。
说明
如果您需要将以上示例中的匿名非鉴权HTTP函数修改为鉴权HTTP函数,您可以通过以下任意一种语言的SDK进行调用:
-
Java SDK
-
Python SDK
-
Node.js SDK
-
常见问题
是否支持通过函数计算打包下载文件时对文件添加水印?
不支持。您可以通过以下方式对存储在OSS中文件增加水印文字或水印图片:
-
对于公共读或者公共读写权限的文件
在文件URL中添加水印参数。具体操作,请参见图片水印。
-
对私有权限的文件
在SDK中添加图片处理参数或图片样式参数的方式添加水印。具体操作,请参见使用SDK处理图片。
通过函数计算打包下载文件时是否支持生成带有时效性的文件下载地址?
不支持。如果您希望文件URL包含过期时间,您需要在URL中携带Expires参数。具体操作,请参见使用文件URL。
更多参考
关于函数计算与OSS交互模板和应用的更多信息,请参见示例代码。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/159555.html