本文介绍如何使用函数计算将对象存储OSS上多个文件(Object)打包下载到本地。

前提条件

使用原理

当您从OSS中批量下载Object时可能会遇到批量下载不方便、小文件较多时下载缓慢等问题。通过调用函数计算,可以将OSS上的Object先打包,然后将压缩包下载到本地后再解压,实现快速下载批量文件的目的。使用函数计算打包下载OSS文件的流程如下图所示。压缩OSS文件
  1. 用户调用函数,并指定存储空间及待压缩的文件。
  2. 函数计算从OSS中获取指定文件,并生成一个随机名称的ZIP压缩包。
  3. 函数计算将压缩包上传至OSS。
  4. 函数计算将ZIP包的下载地址返回给用户。
  5. 用户使用返回的下载地址从OSS中下载文件。

使用说明

  • 函数运行环境的磁盘空间是有限的,所以采用流式下载和上传的方式,只在内存中缓存少量的数据。
  • 为了加快速度,函数计算在生成ZIP文件的同时将文件上传到OSS。
  • 上传ZIP文件到OSS时,利用OSS分片上传的特性,多线程并发上传。
  • 使用函数计算压缩文件时,最大处理时间是10分钟(实验数据为57个文件,总大小1.06 GB,处理时间为63s)。

操作步骤

以下以通过函数计算将华东1(杭州)地域examplebucket中dir/目录下的多个文件打包下载到本地为例。

  1. 通过Serverless应用中心一键部署应用模板start-zip-oss。
    其中,部署类型选择直接部署,应用模板所在地域与Bucket所在地域保持一致,其他选项保留默认配置。配置详情如下图所示。fc

    应用创建完成后,记录部署详情区域中显示的对外公网域名https://zip-oss-func-zip-oss-ayouye****.cn-hangzhou.fcapp.run

  2. 生成event.json文件,并在文件中指定Bucket名称以及待下载的文件所在目录。
    以下以Linux系统为例。
    cat > event.json <<EOF
    {   
       "bucket": "examplebucket",
       "source-dir": "dir/"
    }
    EOF
  3. 触发函数。
    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进行调用: