设置对象标签-PutObjectTagging
功能介绍
OBS支持使用对象标签对桶中的对象进行分类,调用本接口可为已有对象添加或更新标签。了解更多对象标签相关信息,请参考对象标签。
接口约束
- 对象标签功能目前在公测阶段,免费使用;公测结束后,将收取费用。
- 用户读写对象标签必须拥有对应标签操作权限,当前可通过设置桶策略授权给其他用户。默认情况下只有对象的所有者可以执行此操作。
- 并行文件系统不支持给文件添加标签。
授权信息
您必须是对象拥有者或拥有设置对象标签的权限,才能调用本接口,建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见OBS不同权限控制方式的区别。
- 如果使用IAM授权,那么请在“角色与策略授权”、“身份策略授权”两种IAM授权方式中选择一种,并配置相应权限:
- 如果使用角色与策略授权(旧版IAM,即IAM v3接口),需具备obs:object:PutObjectTagging(未开启多版本)、obs:object:PutObjectVersionTagging(开启或暂停多版本)权限,授权操作请参见创建IAM自定义策略。
- 如果使用身份策略授权(新版IAM,即IAM v5接口),如下表所示,需具备obs:object:putObjectTagging(未开启多版本)、obs:object:putObjectVersionTagging(开启或暂停多版本)权限,授权操作请参见创建IAM自定义身份策略。
授权项
Action
访问级别
Access Level
资源类型(*为必须)
Resource Type (*: required)
Condition Key
Alias
依赖的授权项
Dependencies
obs:object:putObjectTagging(未开启多版本)
obs:object:putObjectVersionTagging(开启或暂停多版本)
Tagging
object *
-
-
-
- g:RequestTag/<tag-key>
- g:TagKeys
- obs:EpochTime
- obs:SourceIp
- obs:TlsVersion
- obs:CustomDomain
- 如果使用桶策略进行授权,需具备obs:object:PutObjectTagging(未开启多版本)、obs:object:PutObjectVersionTagging(开启或暂停多版本)权限,具体操作请参见自定义创建桶策略。
URI
PUT /{object_key}?tagging
请求消息样式
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所示。
| 参数名称 | 是否必选 | 类型 | 描述 |
|---|---|---|---|
| tagging | 是 | String | 参数解释: 标识当前请求是对象标签请求。 约束限制: 不涉及。 取值范围: 不涉及。 默认取值: 不涉及。 |
| versionId | 否 | String | 参数解释: 对象版本号。标识设置指定版本的对象标签。对应的响应头 (Response Headers)为x-obs-version-id。如果对应版本为删除标记(Delete Marker),则OBS将返回404 Not Found。 约束限制: 不涉及。 取值范围: 长度为32的版本ID字符串。 默认取值: 不涉及。 |
请求头参数(Request headers)
该请求使用的消息头如下表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所示。
| 消息头名称 | 是否必选 | 类型 | 描述 |
|---|---|---|---|
| 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字符。 取值范围: 不涉及。 默认取值: 不涉及。 |
响应消息样式
1 2 3 4 5 | HTTP/1.1 status_code x-obs-request-id: request id x-obs-id-2: id Content-Length: length Date: date |
响应头 (Response Headers)
该请求的响应消息使用公共响应头,具体请参考表1。
响应体 (Response Body)
该请求的响应消息中不带有响应元素。
错误响应消息
除了公共的错误码外,此接口还会返回一些其他的错误码。下表中列出本接口的一些常见错误,以及可能原因。如下表4 配置对象标签错误码列表。
请求示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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> |
响应示例
1 2 3 4 5 | 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,无需手动计算签名。