ZIP包解压

重要

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

当您需要批量上传文件、按特定目录结构上传文件、上传完整的文件或对文件快速进行资源分发时,可以配置解压规则,上传ZIP文件到OSS指定路径,触发函数计算自动解压,并将解压后内容保存回OSS。

前提条件

已开通函数计算服务。您可以在函数计算的产品详情页面开通函数计算服务。

使用场景

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

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

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

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

实现原理

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

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

  2. 自动触发函数计算。

    配置ZIP包解压规则时需要触发器授权,以便OSS使用触发器角色AliyunOSSEventNotificationRole调用函数计算,触发器授权时自动为该角色授予调用函数计算的权限策略。

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

    配置ZIP包解压规则时需要给函数计算服务授权。授权时将新建角色,函数计算使用角色获取OSS上的ZIP包,并将解压后的文件保存回OSS。新建角色时会同步授予角色相应的权限策略(对OSS Bucket的读写权限)。

费用说明

ZIP包解压功能是增值服务,将产生OSS和函数计算相关费用:

  • OSS:请求Bucket的资源的请求数计费和存储费用。更多信息,请参见OSS计费概述

  • 函数计算:vCPU使用量费用和内存使用量费用,按执行时间计费。例如:ZIP包解压执行了5分钟,vCPU是2核,内存是3GB,计费为2*0.00009*300+3*0.000009*300=0.0621元。更多信息,请参见FC计费概述

Bucket资源和函数计算资源通过Bucket的内网域名进行传输,内网域名传输数据免流量费用。

使用限制

  • 地域限制:仅华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北 3(张家口)、华北5(呼和浩特)、华南1(深圳)、西南1(成都)、中国香港、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、日本(东京)、德国(法兰克福)、英国(伦敦)、美国(弗吉尼亚)、美国(硅谷)地域的存储空间支持ZIP包解压。

    无地域属性的存储空间不支持ZIP包解压。

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

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

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

配置ZIP包解压规则

  1. 登录OSS管理控制台

  2. 单击Bucket 列表,然后单击目标Bucket名称。

  3. 在左侧导航栏,选择数据处理 > ZIP 包解压

  4. 单击ZIP 包解压,在ZIP 包解压面板配置ZIP包解压规则。

    参数说明

    参数

    是否必选

    说明

    服务授权

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

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

    触发器授权

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

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

    前缀

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

    重要

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

    目标目录

    填写ZIP文件解压后存放的目录。置空此项,函数计算会将ZIP文件解压到当前Bucket的根目录。

    • 如果您需要在目标目录中保留ZIP文件名,则选中保留压缩文件名为路径目录

    • 如果您不需要保留ZIP文件名,直接将解压后的文件存放在目标目录,则选中直接解压到目标目录中。配置详情请参见以下配置示例。

    警告

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

    配置示例

    场景

    配置方法

    解压后的文件结构

    所有上传至zipfolder目录的ZIP包均解压到destfolder目录,不保留ZIP包名称。

    • 前缀设置为zipfolder/

    • 目标目录设置为destfolder

    • 选中直接解压到目标目录中

    bucket  ├─── zipfolder/   │    ├─── a.zip│    └─── b.zip└─── destfolder/     ├─── a.txt     ├─── b.txt     └─── ...

    所有上传至zipfolder目录的ZIP包均解压到根目录,保留ZIP包名称。

    您需要配置如下参数:

    • 前缀设置为zipfolder/

    • 目标目录设置为空。

    • 选中保留压缩文件名为路径目录

    bucket  ├─── zipfolder/   │    ├─── a.zip│    └─── b.zip├─── a/│    ├─── a.txt│    └─── ...└─── b/     ├─── b.txt     └─── ...

    所有上传至zipfolder目录的ZIP包均解压到destfolder目录,保留ZIP包名称。

    您需要配置如下参数:

    • 前缀设置为zipfolder/

    • 目标目录设置为destfolder

    • 选中保留压缩文件名为路径目录

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

修改ZIP包解压配置

您可以根据自己的需求修改ZIP包解压的配置。

修改触发函数计算的文件前缀

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

  2. 在弹出的函数详情页面下的触发器管理页签,单击目标触发器右侧的编辑

  3. 编辑触发器对话框,修改文件前缀,其他参数保持默认配置。

  4. 单击确定

修改函数计算配置

  1. 在函数计算控制台的函数详情页面下的函数配置页签,单击目标触发器右侧的编辑

  2. 根据实际需求,修改函数计算相关配置,例如函数执行内存、执行超时时间等。

    具体操作,请参见管理函数

删除触发器

说明

删除后无法恢复,且不能继续使用当前触发器触发函数。执行中的任务会继续进行。

  1. 在函数详情页面下的触发器管理页签,单击目标触发器右侧的删除

  2. 在弹出的对话框,单击删除

相关文档

使用函数计算实现打包下载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压缩包中单个文件的大小不超过1 GB,解压单个压缩包的最大时间是2小时。

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

函数默认最大执行时间是2h,配置ZIP包解压规则后可以在函数计算控制台修改时间,最大支持24h。

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

  2. 在弹出的函数详情页面下单击函数配置页签。

  3. 单击环境信息右侧的编辑

  4. 修改执行超时时间,然后单击确定

压缩包中单个文件超过1 GB

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

是否支持嵌套的ZIP包解压

不支持。

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

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

不可以。

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

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

可以。

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

怎么判断已经解压完成

您可以查看函数调用日志,判断解压是否完成。

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

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

  3. 单击一键启用

  4. 为当前RAM角色授予AliyunLogFullAccess权限。具体操作,请参见为RAM角色授权

  5. 上传zip包文件,然后在函数日志页签查看调用日志。

    以下记录表明函数调用结束,可以说明解压完成。

    image.png

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

不支持。

ZIP包解压功能目前只支持解压.zip格式的文件。

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

没有。

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

OSS是否支持在线压缩

不支持。

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

是否支持分卷压缩

不支持。

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

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

  • 确保函数计算服务已开通。您可以在函数计算的产品详情页面开通函数计算服务。

  • 只特定地域支持ZIP包解压。更多信息,请参见使用限制