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

前提条件

  • 已开通函数计算

    您可以在产品详情页开通产品,详情请参见函数计算

  • 已授权函数计算访问OSS

    授权操作请参见权限简介

背景信息

当您从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)。

操作步骤

以下步骤均以Linux系统为例,Windows和MacOS系统请修改相应命令。

  1. 安装funcraft。
    安装方法请参见安装funcraft
  2. 下载函数代码。
    wget https://fc-demo-public.oss-cn-hangzhou.aliyuncs.com/demo-source-code/zip-oss-code.zip
  3. 解压已下载的函数代码。
    unzip zip-oss-code.zip
  4. 修改event.json文件,填写需要压缩的文件所在位置。
    vi event.json
    {
       "region": "regionid",
       "bucket": "bucketname",
       "source-dir": "path/"
     }
    各参数说明如下:
    • region:填写Bucket所在地域的regionid,例如杭州填写cn-hangzhou
    • bucket:填写Bucket名称。
    • source-dir:填写需要解压的文件目录,例如根目录填写./。建议将需要压缩的文件统一放在一个文件目录下。
  5. 输入fun deploy命令部署函数,并记录URL值。
    deploy
  6. 使用curl命令触发函数。
    命令格式如下:
    curl -v -L -o /localpath -d @./event.json urlvalue
    本文示例中输入的命令为:
    curl -v -L -o /test/oss.zip -d @./event.json https://174649585760****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/zip-service/zip-oss/