对象存储OSS提供ZIP文件自动解压功能。配置解压规则,即指定文件前缀和目标目录后,您上传符合规则的ZIP文件至OSS Bucket时,系统自动完成解压操作,并将解压后的文件写入目标目录。该功能基于函数计算FC与OSS的集成,其本质是在FC侧创建的OSS原生触发器,无需编写代码,即可实现上述事件驱动流程。
实现原理
ZIP包解压结合函数计算完成ZIP文件的解压工作,解压流程如下图所示。
-
匹配解压规则后缀的ZIP文件上传到满足OSS解压规则前缀的目录。
-
自动触发函数计算。
-
函数计算解压ZIP文件,并将解压后的文件存储至OSS的指定目录中。
应用场景
-
批量上传
当您有大量小文件需要上传时,使用程序上传耗时较多,此时可以使用ZIP包解压功能,将文件打包上传。
-
上传完整的文件
出于资源完整性考虑,有时需要将多个文件组合成一个资源,而将多个文件分别上传可能成功率不高,此时可以使用ZIP包解压功能,提升上传成功率。
-
按特定目录结构上传
网站中引用了很多静态资源,资源的目录结构比较复杂,如果在OSS中逐一新建目录上传文件的话耗时很长。此时可以在本地定义ZIP包中目录结构,压缩后上传到OSS,使用ZIP包解压功能解压使用。
-
资源分发
在需要将大量文件分发给用户或不同服务器时,可以将这些文件打包成ZIP包,并使用OSS ZIP包解压功能将ZIP包解压到指定目录。这样可以减少传输时间和带宽消耗。
费用说明
使用ZIP包解压功能,涉及OSS存储费用以及FC函数调用和资源使用费用,详细如下。
-
OSS费用
-
FC费用
涉及函数调用次数费用和调用函数产生的vCPU、内存和磁盘资源使用费用。以上计量项需按照转换系数转换为CU使用量进行计费,详情请参见计费概述。
Bucket内网域名传输数据免流量费用。
使用限制
-
存储类型限制
冷归档或者深度冷归档存储类型的文件需先解冻再解压;归档存储类型的文件,如果所在Bucket未开启归档直读,需先解冻再解压。
-
文件或文件夹命名限制
建议使用UTF-8或GB 2312编码命名您的文件或文件夹,否则可能会出现解压后的文件或文件夹名称出现乱码、解压过程中断等问题。
-
压缩包限制
ZIP压缩包大小不超过10 GB,且单个文件的大小不超过10 GB,解压单个压缩包默认的最大时间是2小时,超过2小时可以调整函数最大执行时长,详情请参见解压超大文件时任务超过2h失败。
配置ZIP包解压触发器
-
登录对象存储 OSS控制台,在左侧导航栏,单击Bucket 列表。
-
在Bucket 列表页面,单击目标Bucket名称。
-
在目标Bucket页面的左侧导航栏,选择,然后单击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 └── ...
配置完成后,支持修改触发器的文件前缀和关联的FC函数配置,具体操作,请参见配置原生OSS触发器和函数实例规格和弹性配置。
相关文档
-
如果您需要实现自动解压更多压缩类型文件,例如
.tar或.gz等,请参见decompress-oss。 -
如果您需要使用函数计算实现打包下载OSS文件,请参见将多个文件打包成ZIP包下载。
常见问题
上传文件后触发函数计算失败
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。
-
在OSS控制台,找到目标Bucket,在ZIP 包解压页面,单击目标触发器右侧的编辑。
-
在弹出的函数详情页面,单击配置页签,在左侧导航栏,选择运行时,然后单击编辑。
-
在运行时编辑面板,修改执行超时时间,然后单击部署。
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的文件列表查看是否已解压文件到目标目录,或在函数计算控制台查看函数调用日志,判断解压是否完成。
-
在OSS控制台的ZIP 包解压页面,单击目标触发器右侧的编辑。
-
在弹出的函数详情页面,单击日志页签。
如果当前函数未启用日志功能,单击一键启用即可。
-
上传ZIP包文件,然后在日志页签查看是否调用成功。
是否支持解压.rar和.tar.gz格式的文件
不支持。
ZIP包解压功能目前只支持解压.zip格式的文件。如果需要解压更多压缩类型文件,请参见decompress-oss。
ZIP包解压完毕后会返回信息给OSS吗
不会。
如果需要查看解压进度,可以在函数计算详情页面的调用日志页签进行查看,或者给解压函数配置异步调用目标服务。更多信息,请参见配置异步调用目标服务。
OSS是否支持在线压缩
不支持。
如果需要将OSS上多个文件(Object)打包下载到本地,可以使用函数计算打包下载。更多信息,请参见将多个文件打包成ZIP包下载。
是否支持分卷压缩
不支持。
ZIP包解压功能只针对单个压缩包,不支持将多个压缩包解压后的内容进行合并,因此大文件分卷压缩成多个.zip压缩包的情况不支持解压。
ZIP包解压按钮为灰色,无法配置ZIP包解压规则
查看是否已根据界面提示完成相关授权,例如已创建函数计算服务关联角色AliyunServiceRoleForFC或授予函数计算向OSS上传文件的权限。