使用函数计算实现多个文件的打包下载

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

流程及实现细节

流程图

使用函数计算在对象存储OSS中同时下载多个文件的流程图如下:

image
  1. 按需调用函数,指定存储空间及待压缩文件。

  2. 调用函数后,函数计算从对象存储OSS中下载目标文件并压缩成ZIP包。

  3. 函数计算将ZIP包上传到对象存储OSS中。

  4. 函数计算将给您返回目标ZIP文件在对象存储OSS中的地址。

  5. 您可以通过步骤4返回的地址下载目标文件。

实现细节

流程图中步骤2步骤3实现的原理如下。

image

使用这种调用方式有以下优势:

  • 函数运行环境的磁盘空间是有限的,采用流式下载和上传的方式,在内存中只缓存少量数据。

  • 上传ZIP文件到对象存储OSS时,利用对象存储OSS分片上传的特性,将分片以队列的形式多线程并发上传。

前提条件

操作步骤

  1. 执行以下命令,初始化项目。

    sudo s init start-zip-oss -d start-zip-oss 
  2. 执行以下命令,进入项目,并进行项目部署。

    cd start-zip-oss && sudo s deploy - y

    部署成功后,输出示例如下。记录返回的system_url,在调用函数时需要使用。

    
     Checking Service, Function, Triggers (2.44s)
     Creating Service, Function, Triggers (1.18s)
    
    ......
    fc-zip-oss-service:
      region:   cn-hangzhou
      service:
        name: zip-oss
      function:
        name:       zip-oss-func
        runtime:    python3.9
        handler:    main.main_handler
        memorySize: 3072
        timeout:    1800
      url:
        system_url:          https://zip-oss-func-zip-oss-****.cn-hangzhou.fcapp.run
        system_intranet_url: https://zip-oss-func-zip-oss-****.cn-hangzhou-vpc.fcapp.run
      triggers:
        -
          type: http
          name: http-test
  3. 应用部署成功后,调用部署好的函数下载多个文件。

    1. start-zip-oss目录下创建event.json文件,并在文件中指定Bucket名称以及待下载的文件。

      • 通过source-dir指定要下载的文件所在的目录。

        cat <<EOF > event.json
        {
          "bucket": "bucketname", 
          "source-dir": "filepath/"
        }
        EOF
      • 通过source-files指定要下载的文件列表。

        cat <<EOF > event.json
        {
          "bucket": "bucketname", 
          "source-files": ["files1.txt","filepath/files2.txt"]
        }
        EOF
    2. 使用curl命令直接调用函数。

      start-zip-oss目录下创建一个文件夹用于存放压缩的文件,本文以tmp文件夹为例。执行的curl命令示例如下:

      说明

      请将命令示例中的访问地址更新为您部署应用成功后返回的公网访问地址system_url

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

      调用成功后,您可以在start-zip-oss/tmp文件夹中查看到下载的压缩文件。同时登录对象存储控制台,在相应的Bucket下的output目录也可以看到下载的压缩文件。

实验数据

场景

文件数

压缩前总大小

压缩后总大小

执行时间

1

7

1.2 MB

1.16 MB

0.4s

2

57

1.06 GB

0.91 GB

63s

您可以通过以上表格获取以下两个信息:

  • 场景1说明使用函数计算实现多个文件的下载,可以减少文件的存储空间。

  • 场景2说明使用函数计算实现多个文件的下载,可以在短时间内下载大量文件。

相关文档