当您需要从对象存储OSS中批量下载多个文件时,可能会遇到批量下载不方便、小文件较多等情况。 您可以通过函数计算将对象存储OSS中的多个文件打包下载至本地,既可以节约时间又可以节省流量及相关费用。 本文介绍如何使用函数计算在对象存储OSS中同时下载多个文件。

流程详解

图 1. 流程图
solution
  1. 按需调用函数,指定存储空间及待压缩文件。
  2. 调用函数后,函数计算从对象存储OSS中下载目标文件并压缩成ZIP包。
  3. 函数计算将ZIP包上传到对象存储OSS中。
  4. 函数计算将给您返回目标ZIP文件在对象存储OSS中的地址。
  5. 您可以通过步骤4返回的地址下载目标文件。
图 2. 实现细节

下图介绍了流程图中步骤步骤2及步骤步骤3间的详细细节。

principle
使用这种调用方式有以下优势:
  • 函数运行环境的磁盘空间是有限的,采用流式下载和上传的方式,实现在内存中缓存少量数据。
  • 函数计算一边生成ZIP文件,一边将生成的ZIP文件上传至对象存储OSS,可以节省文件上传和下载的时间。
  • 上传ZIP文件到对象存储OSS时,利用对象存储OSS分片上传的特性,将分片以队列的形式多线程并发上传。

操作步骤

  1. 您可以选择以下方式下载示例工程:
    注意 若是Windows平台,您需要先下载cURL工具并双击完成安装。
    • 如果您已成功安装Git软件,您可以直接在终端执行以下命令。
      git clone https://github.com/awesome-fc/zip-oss.git
    • 如果您没有安装Git软件,您可以直接下载ZIP代码包
  2. zip-oss项目中,执行fun deploy命令部署工程,并获取URL。
    fcimageoss
  3. 成功部署后,调用部署好的函数打包文件。
    1. zip-oss文件中,修改event文件的参数。
      cat <<EOF > event.json
      {
        "region": "{region}", //替换为Bucket所的地域,例如cn-shanghai。
        "bucket": "{bucket name}", //替换为Bucket名称。
        "source-dir": "{filepath/}" //替换为需要压缩的文件目录。
      }
      EOF
    2. 使用curl相关命令调用函数。
      zip-oss文件中创建一个文件夹用于存放解压的文件,您可以自定义文件的名称,本文以backfile为例。然后针对不同平台的执行以下命令:
      • MacOS平台及Linux平台
        命令格式如下:
        curl -v -L -o /localpath/oss.zip -d @./event.json urlvalue
        本文示例中输入的命令如下:
        curl -v -L -o /backfile/oss.zip -d @./event.json https://18807708****3420.cn-beijing.fc.aliyuncs.com/2016-08-15/proxy/zip-service/zip-oss/
      • Windows平台
        命令格式如下:
        curl -v -o ./localpath/oss.zip -d /event.json urlvalue
        本文示例中输入的命令如下:
        curl -v -o ./backfile/oss.zip -d /event.json https://18807708****3420.cn-beijing.fc.aliyuncs.com/2016-08-15/proxy/zip-service/zip-oss/
      调用成功后,打开zip-oss\backfile文件,您就可以查看backfile目录下的所有文件即对象存储OSS指定的存储空间中的文件。

实验数据

序号 文件数 压缩前总大小 压缩后总大小 执行时间
1 7 1.2 MB 1.16 MB 0.4s
2 57 1.06 GB 1.06 GB 63s
您可以通过以上表格获取以下两个信息:
  • 场景1说明使用函数计算实现多个文件的下载,可以减少文件的存储空间。
  • 场景2说明使用函数计算实现多个文件的下载,可以在短时间内下载大量文件。
说明 以上表格仅供您参考。