配置ZIP包解压触发器

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

对象存储OSS提供ZIP文件自动解压功能。配置解压规则,即指定文件前缀和目标目录后,您上传符合规则的ZIP文件至OSS Bucket时,系统自动完成解压操作,并将解压后的文件写入目标目录。该功能基于函数计算FCOSS的集成,其本质是在FC侧创建的OSS原生触发器,无需编写代码,即可实现上述事件驱动流程。

实现原理

ZIP包解压结合函数计算完成ZIP文件的解压工作,解压流程如下图所示。

image
  1. 匹配解压规则后缀ZIP文件上传到满足OSS解压规则前缀的目录。

  2. 自动触发函数计算。

  3. 函数计算解压ZIP文件,并将解压后的文件存储至OSS的指定目录中。

应用场景

  • 批量上传

    当您有大量小文件需要上传时,使用程序上传耗时较多,此时可以使用ZIP包解压功能,将文件打包上传。

  • 上传完整的文件

    出于资源完整性考虑,有时需要将多个文件组合成一个资源,而将多个文件分别上传可能成功率不高,此时可以使用ZIP包解压功能,提升上传成功率。

  • 按特定目录结构上传

    网站中引用了很多静态资源,资源的目录结构比较复杂,如果在OSS中逐一新建目录上传文件的话耗时很长。此时可以在本地定义ZIP包中目录结构,压缩后上传到OSS,使用ZIP包解压功能解压使用。

  • 资源分发

    在需要将大量文件分发给用户或不同服务器时,可以将这些文件打包成ZIP包,并使用OSS ZIP包解压功能将ZIP包解压到指定目录。这样可以减少传输时间和带宽消耗。

费用说明

使用ZIP包解压功能,涉及OSS存储费用以及FC函数调用和资源使用费用,详细如下。

  • OSS费用

    涉及请求Bucket资源产生的请求费用和文件存储在OSS Bucket产生的存储费用

  • FC费用

    涉及函数调用次数费用和调用函数产生的vCPU、内存和磁盘资源使用费用。以上计量项需按照转换系数转换为CU使用量进行计费,详情请参见CU转换系数

Bucket内网域名传输数据免流量费用。

使用限制

  • 存储类型限制

    冷归档或者深度冷归档存储类型的文件需先解冻再解压;归档存储类型的文件,如果所在Bucket未开启归档直读,需先解冻再解压。

  • 文件或文件夹命名限制

    建议使用UTF-8GB 2312编码命名您的文件或文件夹,否则可能会出现解压后的文件或文件夹名称出现乱码、解压过程中断等问题。

  • 压缩包限制

    ZIP压缩包大小不超过10 GB,且单个文件的大小不超过10 GB,解压单个压缩包默认的最大时间是2小时,超过2小时可以调整函数最大执行时长,详情请参见解压超大文件解压超过2h任务失败

配置ZIP包解压触发器

  1. 登录对象存储 OSS控制台,在左侧导航栏,单击Bucket列表

  2. Bucket列表页面,单击目标Bucket名称。

  3. 在目标Bucket页面的左侧导航栏,选择数据处理 > ZIP包解压,然后单击ZIP包解压,在ZIP包解压面板配置ZIP包解压规则。

    参数

    说明

    本文示例

    服务授权

    创建函数计算服务关联角色用户函数计算访问其他云服务。如果您之前未登录过函数计算控制台,则需要单击授权按钮,完成服务关联角色AliyunServiceRoleForFC的创建。

    不涉及

    函数授权

    授予函数计算读写OSS的权限。

    单击授权按钮,然后按照提示完成授权。

    不涉及

    触发器授权

    授予OSS访问函数计算的权限。

    单击授权按钮,然后按照提示完成授权。如果已完成授权,此项显示为触发器角色

    不涉及

    前缀

    配置触发函数的文件前缀。您上传指定前缀的ZIP文件或将ZIP文件上传至指定目录会触发函数计算。置空此项则匹配所有上传的ZIP文件。

    重要

    置空此项可能会触发循环执行,建议您配置文件前缀。更多信息,请参见如何避免循环触发?

    zipfolder/

    目标目录

    填写ZIP文件解压后存放的目录。置空此项,函数计算会将ZIP文件解压到当前Bucket的根目录。配置不同目标目录,解压后的文件结构见本文配置示例。

    警告

    为避免影响OSS-HDFS服务的正常使用或者引发数据污染、数据丢失的风险,在开通了OSS-HDFS服务的Bucket中配置ZIP包解压规则时,禁止将目标目录填写为.dlsdata/

    • 目标目录为destfolder,选中直接解压到目标目录中

      bucket
      ├─── zipfolder/
      │ ├─── a.zip
      │ └─── b.zip
      └─── destfolder/
      ├─── a.txt
      ├─── b.txt
      └─── ...
    • 目标目录为空,选中保留压缩文件名为路径目录

      bucket/
      ├── zipfolder/
      │   ├── a.zip
      │   └── b.zip
      ├── a/
      │   ├── a.txt
      │   └── ...
      └── b/
          ├── b.txt
          └── ...
    • 目标目录为destfolder,选中保留压缩文件名为路径目录

      bucket/
      ├── zipfolder/
      │   ├── a.zip
      │   └── b.zip
      └── destfolder/
          ├── a/
          │   ├── a.txt
          │   └── ...
          └── b/
              ├── b.txt
              └── ...
  4. 选中我已知晓并同意开通函数计算,通过函数计算处理压缩文件。压缩文件里面的文件名或文件夹名不支持非UTF-8GB 2312编码后,单击确定

配置完成后,支持修改触发器的文件前缀和关联的FC函数配置,具体操作,请参见配置原生OSS触发器配置函数

相关文档

常见问题

上传文件后触发函数计算失败

ZIP包解压涉及OSS与函数计算服务的关联调用。ZIP文件上传到OSS后,OSS触发函数计算执行解压操作。OSS触发函数计算的调用可能失败,您可以在响应Header中通过x-oss-event-status的值(Base64编码)判断是否成功触发解压。如果x-oss-event-status的值解码后为{"Result": "Ok"},表示成功触发解压。如果x-oss-event-status的值解码后不为{"Result": "Ok"},表示触发解压失败,建议重新上传ZIP文件。具体操作,请参见简单上传

说明

ZIP压缩包中单个文件的大小不超过10 GB,解压单个压缩包的最大时间是2小时。

解压超大文件解压超过2h任务失败

函数执行超时,请根据情况调整函数执行超时时间,最大支持24h。

  1. OSS控制台,找到目标Bucket,在ZIP 包解压页面,单击目标触发器右侧的编辑

  2. 在弹出的函数详情页面,单击配置页签,在左侧导航栏,选择运行时,然后单击编辑

  3. 在运行时编辑面板,修改执行超时时间,然后单击部署

ZIP压缩包超过10 GB,或压缩包中单个文件超过10 GB

ZIP压缩包大小超过10 GB或压缩包中单个文件大小超过10 GB,可以采用NAS作为解压临时工作目录。该方案可能会产生少量的NAS存储费用。具体参见unzip-oss-nas

是否支持嵌套的ZIP包解压

不支持。

配置ZIP包解压规则后,在OSS存储空间上传一个ZIP包,触发一次函数计算解压后传回OSS指定目录。如果解压后的文件中依然包括ZIP包,则该ZIP包不能再次解压。您可以将该ZIP包重新上传到OSS存储空间触发解压操作。

通过FC解压后的文件,能不能解压到另一个Bucket

不支持。

ZIP包解压功能仅支持将文件解压到配置ZIP包解压规则时设定的目标目录中。如果需要解压到另一个Bucket,需要基于函数代码做二次开发,修改代码。

解压过程中随时可以看到OSS目录的文件么

可以。

使用ZIP包解压功能时,函数计算边解压边上传文件到OSS,您可以随时在目标目录查看解压后的文件。

怎么判断已经解压完成

您可以在目标Bucket的文件列表查看是否已解压文件到目标目录,或在函数计算控制台查看函数调用日志,判断解压是否完成。

  1. OSS控制台的ZIP 包解压页面,单击目标触发器右侧的编辑

  2. 在弹出的函数详情页面,单击日志页签。

    如果当前函数未启用日志功能,单击一键启用即可。

  3. 上传zip包文件,然后在日志页签查看是否调用成功。

是否支持解压.rar和.tar.gz格式的文件

不支持。

ZIP包解压功能目前只支持解压.zip格式的文件。如果需要解压更多压缩类型文件,请参见decompress-oss

ZIP包解压完毕后会返回信息给OSS

不会。

如果需要查看解压进度,可以在函数计算详情页面的调用日志页签进行查看,或者给解压函数配置异步调用目标服务。更多信息,请参见配置异步调用目标服务

OSS是否支持在线压缩

不支持。

如果需要将OSS上多个文件(Object)打包下载到本地,可以使用函数计算打包下载。更多信息,请参见使用函数计算实现打包下载OSS文件

是否支持分卷压缩

不支持。

ZIP包解压功能只针对单个压缩包,不支持将多个压缩包解压后的内容进行合并,因此大文件分卷压缩成多个.zip压缩包的情况不支持解压。

ZIP包解压按钮为灰色,无法配置ZIP包解压规则

查看是否已根据界面提示完成相关授权,例如已创建函数计算服务关联角色AliyunServiceRoleForFC或授予函数计算向OSS上传文件的权限。