zip打包压缩
更新时间:2024-07-09
简介
ZIP 多文件打包压缩是百度智能云对象存储(Baidu Object Storage,BOS)基于 函数计算(Cloud Function Compute) 为用户提供的数据处理解决方案。用户为存储桶添加多文件打包压缩规则后,指定需要打包压缩文件的 URLs,再通过触发 CFC 函数来执行打包压缩的动作,并将最终的压缩包投递至存储桶的指定路径下。
注意事项
- ZIP 多文件打包压缩最终生成的压缩包不能大于50GB。
- 若您此前在对象存储控制台上为存储桶添加了 ZIP 多文件打包压缩规则,可以在 云函数控制台 上看到您所创建的 ZIP 多文件打包缩函数,请不要删除该函数,否则可能导致您的规则不生效。
- 如果在打包压缩的过程中出现报错,您可以单击所创建的函数右侧的查看日志,跳转到云函数控制台查看日志错误详情。
- 归档存储文件需要先解冻取回后才能打包压缩,若未解冻则打包失败。如您需要打包压缩此类型的对象,请先取回后再进行。
- 仅CFC支持地域可使用该功能。目前暂支持:华北-北京、华南-广州、华东-苏州地域,函数可基于以上地域创建。
操作步骤
- 在控制台开始使用文件打包压缩功能之前,您需要开通CFC服务,才可创建文件打包压缩规则。
- 用户也可以在 云函数控制台 上自行创建函数调用使用。
在控制台使用多文件打包压缩功能的步骤如下所示:
- 打开百度智能云控制台,进入BOS控制界面。
- 在左侧导航栏中,点击【数据魔方】,选择【扩展功能】,即可使用多文件ZIP打包压缩功能,未开通CFC服务的用户按指引开通后即可使用。
- 点击【立即配置】进入打包函数配置界面,点击左上角【创建函数】新建打包函数,输入函数名称、选择地域、勾选CFC授权后点击【确认】即可完成新建函数操作。
- 在函数列表中选择你想要调用的函数,点击操作栏中的【调用】进入函数配置界面。各参数解释见下方多文件压缩参数解释。
- 配置完函数各参数后,点击【开始调用】即可执行该函数,您可在响应结果中查看调用完成后的相关信息。
- 为了您更好的查询、分析函数执行,您可在函数列表操作栏中的【查看日志】对函数配置日志存储,配置日志存储后可查看函数的日志信息。
多文件压缩参数解释
函数参数配置示例
实际使用当中,需将代码中的注释去掉。
{
"bucket": "examplebucket", // 最终投递 ZIP 文件的存储桶
"region": "bj", // 最终投递 ZIP 文件的存储桶所在地域
"endpoint":"https://bj.bcebos.com", // 最终投递 ZIP 文件的存储桶对外服务的访问域名
"key": "test.zip", // 最终投递 ZIP 文件的名称
"flatten": false, // 是否需要对源文件路径进行扁平化处理
/**
* sourceList 用于指定需打包的源文件列表,格式为 JSON 数组
* 每一项包含源文件 url,重命名的路径 renamePath 等
*
*/
"sourceList": [
{
"url": "https://bucket.bj.bcebos.com/dir1/file1.jpg",
"renamePath": "dir1_rename/file1.jpg"
},
{
"url": "https://bucket.bj.bcebos.com/dir2/file2.mp4",
"renamePath": "file2.mp4"
},
{
"url": "https://bucket.bj.bcebos.com/file3.md"
}
]
}
参数说明如下:
参数名 | 参数描述 | 类型 | 是否必填 |
---|---|---|---|
bucket | 最终投递 ZIP 文件的存储桶,命名格式为 BucketName,例如:examplebucket | String | 是 |
region | 最终投递 ZIP 文件的存储桶所在地域,枚举值请参见 区域选择说明 | String | 是 |
endpoint | 最终投递 ZIP 文件的存储桶的对外访问域名,枚举值请参见 区域选择说明 | String | 是 |
key | 最终投递 ZIP 文件的名称(Object 的名称),对象在存储桶中的唯一标识, | String | 是 |
flatten | 是否需要路径扁平化(去除源目录结构),例如:源文件 URL 为 https://domain/source/test.mp4, 则源文件路径为 source/test.mp4,如果为 true,则 ZIP 包中该文件路径为 test.mp4,否则 ZIP 包中该文件路径为 source/test.mp4。默认为 false | Boolean | 否 |
sourceList | 源文件列表,sourceList | Array | 是 |
sourceList[].url | 源文件的 URL | String | 是 |
sourceList[].renamePath | 带路径的重命名,即源文件在 ZIP 包中的文件路径。例如,将 dir1/file1.jpg 重命名为 dir1_rename/file1.jpg。 注意:renamePath 的优先级高于 flatten,重命名后的路径不受扁平化影响 |
String | 否 |
函数响应结果示例
同步调用结果示例:
{
"Code": 0,
"Message": "zip success!",
"Data": {
"Bucket": "<bucket_name>",
"Key": "package1.zip",
"Location": "http://bj.bcebos.com/<bucket_name>/package1.zip",
"Etag": "-cf3cac621791214721d845becc3e9906"
},
"Error": null
}
响应参数说明如下:
参数名 | 参数描述 | 类型 |
---|---|---|
Code | 业务错误码,如果为 0 则说明执行成功,否则为执行失败 | Number |
Message | 执行结果的文字说明,可能为 null | String |
Data | 执行成功的信息,如果执行成功,则包含 ZIP 包的 url 信息 | Object |
Error | 执行的错误信息,如执行成功则为 null | Object or String |
异步调用结果返回202,具体执行日志见函数配置的日志路径
调用压缩函数
- 文件压缩需借助函数计算(CFC) 实现,您需主动调用触发。
- 若需批量打包推荐您使用SDK更加便捷。
- 您可前往SDK概览查看各语言安装SDK的指引文档,并根据文档安装对应的SDK。
- 安装SDK后,可以通过SDK调用CFC的调用函数接口(invocations)从而触发对应的云函数,具体参数见函数调用接口。
实际案例
案例一:简单案例
参数配置
{
"bucket": "<bucket_name>",
"region": "bj",
"endpoint":"https://bj.bcebos.com",
"key": "mypack.zip",
"flatten": false,
"sourceList": [
{
"url": "https://<bucket_name>.bj.bcebos.com/dir1/file1.jpg"
},
{
"url": "https://<bucket_name>.bj.bcebos.com/dir2/file2.mp4"
},
{
"url": "https://<bucket_name>.bj.bcebos.com/file3.md"
}
]
}
最终 ZIP 压缩包结构
mypack.zip
├── dir1/file1.jpg
├── dir2/file2.mp4
└── file3.md
案例二:源文件路径扁平化
参数配置
{
"bucket": "<bucket_name>",
"region": "bj",
"endpoint":"https://bj.bcebos.com",
"key": "mypack.zip",
"flatten": true, // flatten 为 true,对源文件路径进行扁平化处理
"sourceList": [
{
"url": "<bucket_name>.bj.bcebos.com/dir1/file1.jpg"
},
{
"url": "<bucket_name>.bj.bcebos.com/dir2/file2.mp4"
},
{
"url": "<bucket_name>.bj.bcebos.com/file3.md"
}
]
}
最终 ZIP 压缩包结构
mypack.zip
├── file1.jpg
├── file2.mp4
└── file3.md
案例三:源文件路径重命名
参数配置
{
"bucket": "<bucket_name>",
"region": "bj",
"endpoint":"https://bj.bcebos.com",
"key": "mypack.zip",
"flatten": false,
"sourceList": [
{
"url": "https://<bucket_name>.bj.bcebos.com/dir1/file1.jpg",
// 将 dir1/file1.jpg 路径重命名为 dir1_rename/file1.jpg
"renamePath": "dir1_rename/file1.jpg"
},
{
"url": "https://<bucket_name>.bj.bcebos.com/dir2/file2.mp4",
// 将 dir2/file2.mp4 重命名为 file2.mp4
"renamePath": "file2.mp4"
},
{
"url": "https://<bucket_name>.bj.bcebos.com/file3.md"
}
]
}
最终 ZIP 压缩包结构
mypack.zip
├── dir1_rename/file1.jpg
├── file2.mp4
└── file3.md
案例四:源文件路径重命名 + 扁平化
参数配置
{
"bucket": "<bucket_name>",
"region": "bj",
"endpoint":"https://bj.bcebos.com",
"key": "mypack.zip",
"flatten": true, // flatten 为 true,对源文件路径进行扁平化处理
"sourceList": [
{
"url": "https://<bucket_name>.bj.bcebos.com/dir1/file1.jpg"
},
{
"url": "https://<bucket_name>.bj.bcebos.com/dir2/file2.mp4"
},
{
"url": "https://<bucket_name>.bj.bcebos.com/file3.md",
// 将 file3.md 重命名为 dir3/file3.md,renamePath 优先级比 flatten 高,因此重命名后的路径不会被扁平化
"renamePath": "dir3/file3.md"
}
]
}
最终 ZIP 压缩包结构
mypack.zip
├── file1.jpg
├── file2.mp4
└── dir3/file3.md