# 设置对象标签-PutObjectTagging
#### 功能介绍
OBS支持使用对象标签对桶中的对象进行分类，调用本接口可为已有对象添加或更新标签。了解更多对象标签相关信息，请参考[对象标签](https://support.huaweicloud.com/usermanual-obs/obs_41_0054.html)。
#### 接口约束
- 对象标签功能目前在公测阶段，免费使用；公测结束后，将收取费用。
- 用户读写对象标签必须拥有对应标签操作权限，当前可通过设置桶策略授权给其他用户。默认情况下只有对象的所有者可以执行此操作。
- 用户可在PUT上传、分段上传、上传、复制对象过程中设置标签，也可以对已上传的对象设置标签。
- 设置或更改对象标签不会改变对象的Lastmodified时间。
- 并行文件系统不支持给文件添加标签。

- 每个对象最多能设置10个标签。
- 标签的键值约束： 键名（Key）区分大小写且必须唯一，不能为空且不能超过128个字符，不允许使用,/\|\<\>=\*\\字符。
  键值（Value）区分大小写且可以为空，不能超过255个字符，不允许使用,/\|\<\>=\*\\字符。
  
 
#### 授权信息
您必须是对象拥有者或拥有设置对象标签的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:object:PutObjectTagging** (未开启多版本)、**obs:object:PutObjectVersionTagging** （开启或暂停多版本）权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:object:putObjectTagging** (未开启多版本)、**obs:object:putObjectVersionTagging** （开启或暂停多版本）权限，授权操作请参见[创建IAM自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)。
    
    | 授权项 Action                                                                       | 访问级别 Access Level | 资源类型（\*为必须） Resource Type (\*: required) | [条件键](https://support.huaweicloud.com/api-obs/obs_04_0112.html#ZH-CN_TOPIC_0000002375307974__condition_table) Condition Key                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | [别名](https://support.huaweicloud.com/iam5_faq/iam_01_1103.html) Alias | 依赖的授权项 Dependencies |
    |:---|:---|:---|:---|:---|:---|
    | obs:object:putObjectTagging(未开启多版本) obs:object:putObjectVersionTagging（开启或暂停多版本） | Tagging                                                         | object \*                                                                           | - [g:EnterpriseProjectId](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)  - [g:ResourceTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | -                                                                                                                      | -                                                       |
    | obs:object:putObjectTagging(未开启多版本) obs:object:putObjectVersionTagging（开启或暂停多版本） | Tagging                                                         | -                                                                                   | - [g:RequestTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)  - [g:TagKeys](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)  - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain   | -                                                                                                                      | -                                                       |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:object:PutObjectTagging** (未开启多版本)、**obs:object:PutObjectVersionTagging** （开启或暂停多版本）权限，具体操作请参见[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
 
#### URI
PUT /{*object_key*}?tagging
#### 调用方法
请参见[如何调用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=PutObjectTagging)在线调试接口。
#### 请求消息样式
```
PUT /objectname?tagging&versionId=versionid HTTP/1.1
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Date: date
Authorization: authorization string
Content-MD5: md5
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Tagging xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
    <TagSet>
        <Tag>
            <Key>Key</Key>
            <Value>Value</Value>
        </Tag>
     </TagSet> 
</Tagging>
```
#### URI参数（URI Parameters）
该请求使用的消息参数如下[表1]所示。
 表1URI参数（URI Parameters） 
| **参数名称** | **是否必选** | 类型    | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| tagging   | 是         | String | **参数解释：** 标识当前请求是对象标签请求。 **约束限制：** 不涉及。 **取值范围：** 不涉及。 **默认取值：** 不涉及。                                                                                                                     |
| versionId  | 否         | String  | **参数解释：** 对象版本号。标识设置指定版本的对象标签。对应的响应头 (Response Headers)为x-obs-version-id。如果对应版本为删除标记（Delete Marker），则OBS将返回404 Not Found。 **约束限制：** 不涉及。 **取值范围：** 长度为32的版本ID字符串。 **默认取值：** 不涉及。 |
   
#### 请求头参数（Request headers）
该请求使用的消息头如下[表2]所示。
 表2请求头参数 
| **消息头名称**   | **是否必选** | 类型     | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| Content-MD5 | 是       | String | **参数解释：** 按照RFC 1864标准计算出消息体的MD5摘要字符串，即消息体128-bit MD5值经过base64编码后得到的字符串。也支持设置Content-SHA256头域，其值为消息体256-bit SHA256值经过base64编码后得到的字符串，Content-MD5和Content-SHA256二选一。 示例：n58IG6hfM7vqI4K0vnWpog== 约束限制： 不涉及。 取值范围： Base64编码的MD5值。 默认取值： 不涉及。 |
   
#### 请求体参数（Request body）
在此请求中，需要在请求的消息体中配置对象的标签。标签的配置信息以XML格式上传。具体的配置元素如下[表3]所示。
 表3对象的标签配置元素 
| 消息头名称 | 是否必选 | 类型         | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|:---|
| Tagging  | 是     | Container  | **参数解释：** TagSet和Tag的根元素。 **约束限制：** XML最大不超过50KB。 **取值范围：** 不涉及。 **默认取值：** 不涉及。                                                                                                                                                 |
| TagSet  | 是      | Container | **参数解释：** Tag的集合元素。Tagging是TagSet的父元素。 **约束限制：** 不涉及。 **取值范围：** 不涉及。 **默认取值：** 不涉及。                                                                                                                                                   |
| Tag      | 是     | Container | **参数解释：** Tag的信息元素。TagSet是Tag的父元素。 **约束限制：** 对象标签数量不超过10。 **取值范围：** 不涉及。 **默认取值：** 不涉及。                                                                                                                                         |
| Key    | 是   | String     | **参数解释：** Tag的名字。Tag是Key的父元素。 **约束限制：** 区分大小写且必须唯一且不能为空。标签的键名（Key）和键值（Value）不能包含字符","、"\*"、"\|"、"/"、"\<"、"\>"、"="、"\\"以及ASCII码0x00--0x1F的控制字符，在发送到服务器之前，必须将键名（Key）和键值（Value）进行UrlEncode编码，长度不超过128字符。 **取值范围：** 不涉及。 **默认取值：** 不涉及。  |
| Value   | 是  | String      | **参数解释：** Tag的值。Tag是Value的父元素。 **约束限制：** 区分大小写且可以为空字符串。标签的键名（Key）和键值（Value）不能包含字符","、"\*"、"\|"、"/"、"\<"、"\>"、"="、"\\"以及ASCII码0x00--0x1F的控制字符，在发送到服务器之前，必须将键名（Key）和键值（Value）进行UrlEncode编码，长度不超过255字符。 **取值范围：** 不涉及。 **默认取值：** 不涉及。 |
   
#### 响应消息样式
```
HTTP/1.1 status_code
x-obs-request-id: request id
x-obs-id-2: id
Content-Length: length
Date: date
```
#### 响应头 (Response Headers)
该请求的响应消息使用公共响应头，具体请参考[表1](https://support.huaweicloud.com/api-obs/obs_04_0013.html#ZH-CN_TOPIC_0173612084__d0e686)。
#### 响应体 (Response Body)
该请求的响应消息中不带有响应元素。
#### 错误响应消息
除了公共的错误码外，此接口还会返回一些其他的错误码。下表中列出本接口的一些常见错误，以及可能原因。如下[表4 配置对象标签错误码列表]。
 表4配置对象标签错误码列表 
| 错误码            | 描述                   | HTTP状态码 |
|:---|:---|:---|
| InvalidTag    | 配置对象标签时，提供了无效的Tag | 400     |
| BadRequest     | 对象标签个数超过上限         | 400      |
| MalformedXML    | 配置对象标签时，提供的xml格式错误 | 400     |
| EntityTooLarge | 请求body体超长          | 400   |
| AccessDenied    | 用户无权限设置对象标签        | 403      |
| MethodNotAllowed | 不允许使用该方法（特性开关未开启）  | 405    |
   
#### 请求示例
```
PUT /objectname?tagging&versionId=G001018455096CE600005306000000DD HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Wed, 27 Jun 2018 13:22:50 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:Pf1ZyGvVYg2BzOjokZ/BAeR1mEQ=
Content-MD5: MnAEvkfQIGnBpchOE2U6Og==
Content-Length: 182
<Tagging xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
  <TagSet>
    <Tag>
      <Key>TagName1</Key>
      <Value>TagSetValue1</Value>
    </Tag>
  </TagSet>
</Tagging>
```
#### 响应示例
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF26000001643FEBA09B1ED46932CD07
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSEZp87iEirC6DggPB5cN49pSvHBWClg
Date: Wed, 27 Jun 2018 13:22:50 GMT
```
#### 使用SDK调用接口
建议您使用OBS SDK调用接口。SDK对API进行了封装以简化您的开发工作，直接调用SDK接口函数即可访问OBS，无需手动计算签名。
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0000001895350256.html) | [PHP](https://support.huaweicloud.com/sdk-php-devg-obs/obs_28_1305.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_5000.html) | [C](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_3361.html) | [GO](https://support.huaweicloud.com/sdk-go-devg-obs/obs_33_0614.html) | [BrowserJS](https://support.huaweicloud.com/sdk-browserjs-devg-obs/zh-cn_topic_0000002602843987.html) | .NET暂不支持 | [Android](https://support.huaweicloud.com/sdk-android-devg-obs/obs_26_2001.html) | iOS暂不支持 | [Node.js](https://support.huaweicloud.com/sdk-nodejs-devg-obs/obs_29_1305.html) |
|---|---|---|---|---|---|---|---|---|---|
   
#### 相关文档
- 了解更多对象标签相关介绍，请参见[对象标签](https://support.huaweicloud.com/usermanual-obs/obs_41_0054.html)。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
