
# 设置在线解压策略-PutDecompressPolicy
#### 功能介绍
OBS支持ZIP包上传后自动解压并存放在指定目录。桶设置了在线解压策略后，上传到该桶内的ZIP包如果匹配解压策略，ZIP包将会自动解压到指定目录里。本接口用于为指定桶配置ZIP文件解压策略。了解更多在线解压相关信息，请参见[在线解压](https://support.huaweicloud.com/usermanual-obs/obs_03_0368.html) 。
URI 参数 obscompresspolicy 是 OBS 侧定义的子资源名称，是对"压缩/解压缩"功能的统称；接口名使用 DecompressPolicy 是对该策略实际业务语义（解压缩）的精确表达。
#### 接口约束
**权限限制：**
- 需要使用IAM的角色与策略授权功能，增加Tenant Administrator权限后才能设置、获取、删除在线解压策略。
- 在线解压源需使用IAM创建云服务委托，委托OBS获取桶内数据，上传数据到桶内。委托需要给OBS服务授予obs:object:PutObject、obs:object:GetObject、obs:object:AbortMultipartUpload权限。
**包及文件大小限制：**
- 单个ZIP包大小上限为**1GB**。
- 单个ZIP包内最多可包含65536个文件。
- ZIP包内，单个文件解压后最大为40GB。
**时间限制：**
- ZIP包解压任务最大时长为10分钟。
**功能限制：**
- ZIP包的后缀必须为zip。
- ZIP包名称中不可带有中文标点符号、特殊符号和特殊编码，如：\\/:\*?"\<\>\|@#￥。
- 针对ZIP包嵌套的场景，在线解压策略的事件类型需设置为ObjectCreated:\*或ObjectCreated:CompleteMultipartUpload。
- 目前不支持解压任务完成后给用户发送消息通知。
- 目前仅支持解压压缩算法为deflated的ZIP包，此处的压缩算法与WINRAR等软件提供的Store、Normal等压缩方法不等同。
- 解压路径加上压缩包解压出文件的文件名，总字符长度不可超过512，否则会导致解压失败。
- 目前不支持解压加密ZIP包。
- 不支持企业联邦用户使用在线解压功能，更多关于联邦用户的相关信息请参考[华为云账号、华为账号、IAM用户、企业联邦用户的关系](https://support.huaweicloud.com/iam_faq/iam_01_0615.html)和[身份提供商概述](https://support.huaweicloud.com/usermanual-iam/iam_08_0001.html)。
 
#### URI
PUT /
#### 调用方法
请参见[如何调用API](https://support.huaweicloud.com/api-obs/obs_04_0006.html)。调用前需要先[计算API签名](https://support.huaweicloud.com/api-obs/obs_04_0009.html)，并将签名添加到请求中。
您还可以使用[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/OBS/doc?api=SetBucketObsCompressPolicy)在线调试接口。
#### 请求消息样式
```
PUT /?obscompresspolicy HTTP/1.1
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Authorization: authorization
Content-Type: application/json
Content-Length: length
Date: date
{
"rules": [{
"id": "ruleid",
"project": "your project id",
"agency": "testagency",
"events": ["ObjectCreated:*"],
"prefix": "decompress",
"suffix": ".zip",
"overwrite": 0,
"decompresspath": "after-decompress/",
                "policytype": "decompress"
}]
}
```
#### URI参数（URI Parameters）
| 参数                | 类型     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|
| obscompresspolicy | String | **参数解释：** 标识操作在线解压策略子资源的查询参数，作为URI参数携带，无参数值。该参数用于区分桶上的不同策略子资源，表示本次请求针对的是在线解压策略。 **约束限制：** 不涉及。 **取值范围：** 空值（仅需key存在即可，无需赋值，即 ?obscompresspolicy）。 **默认取值：** 不涉及 |
   
#### 请求头参数（Request headers）
该请求使用公共请求头，具体参见[表3](https://support.huaweicloud.com/api-obs/obs_04_0007.html#ZH-CN_TOPIC_0136436606__table25197309)。
#### 请求体参数（Request body）
表1请求体参数（Request body） 
| 参数    | 是否必选 | 参数类型      | 描述                                                                                                                                                                                                                             |
|:---|:---|:---|:---|
| rules | 是    | Container | **参数解释：** 策略规则数组。 **约束限制：** 同一个桶下的不同策略前缀不能重复和起始包含，后缀不能结尾包含。同一个桶下的不同策略所使用的IAM委托，建议使用同一个委托。数组大小\[1, 10\]。 |
   
表2rules参数说明 
| 参数             | 是否必选 | 参数类型            | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| id             | 是    | String          | **参数解释：** 解压策略名称。当前桶上配置的解压规则的唯一标识。满足"\^\[a-zA-Z0-9_-\]{1,256}$"，即长度为1\~256个字符。只能由大写或小写的英文字母、数字、下划线（_）和连字符（-）组成。例如：event_0001。 **约束限制：** 只允许大小写英文字母、数字、下划线（_）和连字符（-），同一桶内策略ID不可重复。 **取值范围：** \[1, 256\] **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| project        | 是    | String          | **参数解释：** 项目ID。 **约束限制：** 不能为空，必须是当前租户下合法有效的项目ID。 **取值范围：** 当前租户下合法有效的项目ID。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| agency         | 是    | String          | **参数解释：** 委托名。客户通过委托赋予OBS服务查询用户桶内指定对象是否存在以及向用户桶内上传对象的权限。 **约束限制：** 不能为空，必须是已授权给OBS服务的委托名称。 **取值范围：** 已授权的委托名称。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| events         | 是    | Array of String | **参数解释：** 触发事件类型。 **约束限制：** 不能为空，事件不能重复，通配事件（如ObjectCreated:\*）与其子事件不能同时配置。 **取值范围：** - **ObjectCreated:\***：所有对象创建事件的通配符。当桶中发生任何形式的对象创建操作时触发，包括 Put、Post、Copy、CompleteMultipartUpload 等所有创建类子事件。  - **ObjectCreated:Put**：PUT 上传创建对象。当使用 PUT 请求上传对象时触发。对应 OBS 的 PUT Object 接口（即直接上传一个完整对象到指定路径）。  - **ObjectCreated:Post**：POST 上传创建对象。当使用 POST 请求上传对象时触发。对应 OBS 的 POST Object 接口（通常用于表单上传场景）。  - **ObjectCreated:Copy**：复制创建对象。当使用 COPY 请求将一个已有对象复制到新路径时触发。对应 OBS 的 COPY Object 接口。  - **ObjectCreated:CompleteMultipartUpload**：合并段创建对象。当多段上传任务完成合并（Complete Multipart Upload）时触发。即用户将一个大文件分多段上传后，调用合并接口将所有段合并为一个完整对象时触发。   **默认取值**： 不涉及。 |
| prefix         | 否    | String          | **参数解释：** 匹配规则前缀。 **约束限制：** prefix与suffix长度各自不超过1024个字符，两者合计也不超过1024个字符。同一桶下不同策略的前后缀组合不能重复和起始包含/结尾包含。 **取值范围：** 1\~1024字符。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| suffix         | 是    | String          | **参数解释：** 匹配规则后缀。 **约束限制：** 必须是系统支持的压缩文件类型后缀（现仅支持.zip） **取值范围：** 系统支持的压缩文件类型后缀.zip。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| overwrite      | 是    | Integer         | **参数解释：** 解压后同名文件的处理方式。 **约束限制：** 取值必须为0、1或2，其他值非法。 **取值范围：** - 0：不覆盖跳过。  - 1：不覆盖，以文件的CRC32值重命名。  - 2：覆盖。   **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| decompresspath | 否    | String          | **参数解释：** 文件解压后存放的路径，不为空时必须以"/"结尾，且不能以"/"开头。 **约束限制：** 不为空时必须以"/"结尾，且不能以"/"开头。decompresspath长度与规则ID长度、委托名长度之和不超过800。 **取值范围：** decompresspath的单独长度为\[0, 800\]，且 decompresspath + id + agency 总长度不超过800。 **默认取值**： 无。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| policytype     | 否    | String          | **参数解释：** 文件解压策略类型。 **约束限制：** 必须填写"decompress"。 **取值范围：** decompress：执行解压操作。 **默认取值**： decompress。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
![](https://support.huaweicloud.com/api-obs/public_sys-resources/note_3.0-zh-cn.png)
请保证解压策略名称、解压路径、IAM委托名称长度之和不超过800。
#### 响应消息样式
```
HTTP/1.1 status
Server: OBS
Date: date
Content-Length: length
```
#### 响应头 (Response Headers)
该请求的响应消息使用公共响应头，具体请参考[表1](https://support.huaweicloud.com/api-obs/obs_04_0013.html#ZH-CN_TOPIC_0173612084__d0e686)。
#### 响应体 (Response Body)
该请求的响应消息中不带消息元素。
#### 错误响应消息
无特殊错误，所有错误已包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)和[OEF错误码](https://support.huaweicloud.com/api-obs/obs_04_0115.html#ZH-CN_TOPIC_0000002510799800__table1490164511612)中。
#### 请求示例
```
PUT /?obscompresspolicy HTTP/1.1
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:sc2PM13Wlfcoc/YZLK0MwsI2Zpo=
Content-Type: application/json
Content-Length: 497
Date: Tue, 21 Jul 2020 15:38:30 GMT
{
"rules": [{
"id": "ruleid",
"project": "your project id",
"agency": "testagency",
"events": ["ObjectCreated:*"],
"prefix": "decompress",
"suffix": ".zip",
"overwrite": 0,
"decompresspath": "after-decompress/",
                "policytype": "decompress"
}]
}
```
#### 响应示例
```
HTTP/1.1 201 Created
Server: OBS
Date: Tue, 07 Jul 2020 07:29:13 GMT
Content-Length: 0
```
#### 相关文档
- 了解更多在线解压相关信息，请参见[在线解压](https://support.huaweicloud.com/usermanual-obs/obs_03_0368.html) 。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
