
# 修改对象元数据-SetObjectMetadata
#### 功能介绍
元数据（Metadata）为描述对象属性的信息，是一组名称和值的配对，用作对象管理的一部分。可通过本接口添加、修改或删除桶中已经上传的对象的元数据。了解更多对象元数据相关知识，请参见[配置、编辑、查看对象元数据](https://support.huaweicloud.com/usermanual-obs/obs_03_0324.html)。
#### 接口约束
- 当桶开启多版本控制时，最新版本的对象支持设置元数据，历史版本的对象不支持设置元数据。
- 对于存储类别为归档存储或深度归档存储的对象，不能对其设置对象的元数据。
- 自定义元数据总大小限制为8KB。
- 配置、编辑、查看对象元数据，需要的权限请参见[对象相关权限](https://support.huaweicloud.com/api-obs/obs_04_0112.html)。
 
#### 授权信息
您必须是对象拥有者或拥有修改对象元数据的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:object:ModifyObjectMetadata** 权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:object:modifyObjectMetadata** 权限，授权操作请参见[创建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:modifyObjectMetadata                     | Write                                                       | object \*                                                                         | [g:EnterpriseProjectId](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)                                                                                                                                                                                                                                                                                                                                                               | -                                                                                                             | -             |
    | obs:object:modifyObjectMetadata                     | Write                                                       | -                                                                                 | - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain   | -                                                                                                             | -             |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:object:ModifyObjectMetadata** 权限，具体操作请参见[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
 
#### URI
PUT /{*object_key*}
#### 调用方法
请参见[如何调用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=SetObjectMetadata)在线调试接口。
#### 请求消息样式
```
PUT /ObjectName?metadata HTTP/1.1 
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Content-Type: application/xml 
Content-Length: length
Authorization: authorization
Date: date
<Optional Additional Header>
```
#### URI参数（URI Parameters）
表1URI参数 
| **参数名称**  | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| versionId | String   | 否        | **参数解释：** 对象的版本号。 **约束限制：** 无 **取值范围：** 长度为32的字符串。 **默认取值：** 无 |
   
#### 请求头参数（Request headers）
![](https://support.huaweicloud.com/api-obs/public_sys-resources/note_3.0-zh-cn.png)
OBS支持在修改对象元数据的请求里携带HTTP协议规定的6个请求头：Cache-Control、Expires、Content-Encoding、Content-Disposition、Content-Type、Content-Language，OBS会直接将这些头域的值保存在对象元数据中，在下载对象或者HEAD对象的时候，这些保存的值将会被设置到对应的HTTP头域中返回客户端。
表2请求头参数 
| **消息头名称**                       | **消息头类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|:---|
| x-obs-metadata-directive        | String    | 是        | **参数解释：** 元数据操作指示符。 **约束限制：** 如果您想要通过修改对象元数据的方式修改对象存储类别，x-obs-metadata-directive必须使用REPLACE_NEW。 **取值范围：** - REPLACE_NEW：替换已经存在的元数据的值，对不存在的元数据进行赋值，未指定的非自定义元数据保持不变，未指定的自定义元数据被删除。  - REPLACE：使用当前请求中携带的元数据完整替换，未指定的元数据（除x-obs-storage-class的其它元数据）被删除。   **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                            |
| Cache-Control                   | String    | 否        | **参数解释：** 指定对象被下载时的网页的缓存行为。 **约束限制：** 无 **取值范围：** 参见HTTP标准头域Cache-Control的取值。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Content-Disposition             | String    | 否        | **参数解释：** 指定对象被下载时的名称。 **约束限制：** 无 **取值范围：** 参见HTTP标准头域Content-Disposition的取值。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Content-Encoding                | String    | 否        | **参数解释：** 指定对象被下载时的内容编码格式。 **约束限制：** 无 **取值范围：** 参见HTTP标准头域Content-Encoding的取值。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Content-Language                | String    | 否        | **参数解释：** 指定对象被下载时的内容语言格式。 **约束限制：** 无 **取值范围：** 参见HTTP标准头域Content-Language的取值。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Content-Type                    | String    | 否        | **参数解释：** 指定对象被下载时的文件类型。 **约束限制：** 无 **取值范围：** Content-type的常见取值参见[常见的Content-Type类型](https://support.huaweicloud.com/usermanual-obs/obs_03_0324.html)。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Expires                         | String    | 否        | **参数解释：** 指定对象被下载时的网页的缓存过期时间。 注意： 此参数不用于设置对象过期时间，设置过期时间的参数请使用x-obs-expires。 **约束限制：** 无 **取值范围：** 参见HTTP标准头域Expires的取值。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| x-obs-website-redirect-location | String    | 否        | **参数解释：** 当桶设置了Website配置，可以将获取这个对象的请求重定向到桶内另一个对象或一个外部的URL。 例如，重定向请求到桶内另一对象： x-obs-website-redirect-location:/anotherPage.html 或重定向请求到一个外部URL： x-obs-website-redirect-location:http://www.example.com/ **约束限制：** 必须以"/"、"http://"或"https://"开头，长度不超过2KB。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                               |
| x-obs-storage-class             | String    | 否        | **参数解释：** 指定对象的存储类型。 示例：x-obs-storage-class: STANDARD **约束限制：** 指定对象的存储类型时请注意大小写敏感。 **取值范围：** - STANDARD：标准存储  - WARM：低频访问存储  - COLD：归档存储  - DEEP_ARCHIVE：深度归档存储 注意： 深度归档数据存储不会跨境传输。    **默认取值：** 无                                                                                                                                                |
| x-obs-meta-\*                   | String    | 否        | **参数解释：** 对象的自定义元数据。OBS支持用户使用以"x-obs-meta-"开头的消息头来加入自定义的元数据，以便对对象进行自定义管理。当用户获取此对象或查询此对象元数据时，加入的自定义元数据将会在返回的消息头中出现。 示例：x-obs-meta-test: test metadata **约束限制：** - 所有自定义元数据大小的总和不超过8K。单个自定义元数据大小的计算方式为：每个键和值的UTF-8 编码中的字节总数。  - 自定义元数据的key值不区分大小写，OBS统一转为小写进行存储。value值区分大小写。  - 自定义元数据key-value对都必须符合US-ASCII。如果一定要使用非ASCII码或不可识别字符，需要客户端自行做编解码处理，可以采用URL编码或者Base64编码，服务端不会做解码处理。例如x-obs-meta-中文：中文经URL编码后发送，"中文"的URL编码为：%E4%B8%AD%E6%96%87，则响应为x-obs-meta-%E4%B8%AD%E6%96%87: %E4%B8%AD%E6%96%87   **取值范围：** 无 **默认取值：** 无 |
| x-obs-expires                   | Integer   | 否        | **参数解释：** 指定对象过期时间，单位是天。过期之后对象会被自动删除。 示例：x-obs-expires:3 **约束限制：** 设置的天数计算出的过期时间不能早于当前时间，如10天前上传的对象，不能设置小于10的值。 **取值范围：** 大于0的整数值。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| x-obs-tagging                   | String    | 否        | **参数解释：** 以键值对（Key-Value）的形式指定对象的标签信息，可同时设置多个标签。 示例：x-obs-tagging:TagA=A\&TagB\&TagC **约束限制：** - Key或Value包含特殊字符以及"="、中文字符时，需要进行URL编码处理。  - 如果某项没有"="，则看作Value为空字符串。   **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                   |
   
#### 请求消息元素
该请求消息中不使用消息元素。
#### 响应消息样式
```
HTTP/1.1 status_code
Date: date
Content-Length: length
Etag: etag
Last-Modified: time
```
#### 响应头 (Response Headers)
表3响应头 
| **消息头名称**                       | **消息头类型** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|
| x-obs-metadata-directive        | String    | **参数解释：** 元数据操作指示符。 **取值范围：** - REPLACE_NEW：替换已经存在的元数据的值，对不存在的元数据进行赋值，未指定的非自定义元数据保持不变，未指定的自定义元数据被删除。  - REPLACE：使用当前请求中携带的元数据完整替换，未指定的元数据（除x-obs-storage-class的其它元数据）被删除。                                                                                                                                                                                                                                                                                                                                                                   |
| Cache-Control                   | String    | **参数解释：** 指定对象被下载时的网页的缓存行为。如果请求携带了此头域，那么响应的消息中应该包含此消息头。 **取值范围：** 参见HTTP标准头域Cache-control的取值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Content-Disposition             | String    | **参数解释：** 指定对象被下载时的名称。如果请求携带了此头域，那么响应的消息中应该包含此消息头。 **取值范围：** 参见HTTP标准头域Content-Disposition的取值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Content-Encoding                | String    | **参数解释：** 指定对象被下载时的内容编码格式。如果请求携带了此头域，那么响应的消息中应该包含此消息头。 **取值范围：** 参见HTTP标准头域Content-Encoding的取值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Content-Language                | String    | **参数解释：** 指定对象被下载时的内容语言格式。如果请求携带了此头域，那么响应的消息中应该包含此消息头。 **取值范围：** 参见HTTP标准头域Content-Language的取值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Expires                         | String    | **参数解释：** 指定对象被下载时的网页的缓存过期时间。如果请求携带了此头域，那么响应的消息中应该包含此消息头。 **取值范围：** 参见HTTP标准头域Expires的取值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| x-obs-website-redirect-location | String    | **参数解释：** 当桶设置了Website配置，可以将获取这个对象的请求重定向到桶内另一个对象或一个外部的URL。必须以"/"、"http://"或"https://"开头，长度不超过2KB，如果请求携带了此头域，那么响应的消息中应该包含此消息头。 例如，重定向请求到桶内另一对象： x-obs-website-redirect-location:/anotherPage.html 或重定向请求到一个外部URL： x-obs-website-redirect-location:http://www.example.com/ **取值范围：** 无                                                                                                                                                                                                                                                                                                                                                                                                           |
| x-obs-storage-class             | String    | **参数解释：** 指定对象的存储类型。如果请求携带了此头域，那么响应的消息中应该包含此消息头。指定对象的存储类型时请注意大小写敏感。 **取值范围：** - STANDARD  - WARM  - COLD  - DEEP_ARCHIVE                                                                                                                                                                                                                                                                                                                                           |
| x-obs-meta-\*                   | String    | **参数解释：** 对象的自定义元数据。OBS支持用户使用以"x-obs-meta-"开头的消息头来加入自定义的元数据，以便对对象进行自定义管理。当用户获取此对象或查询此对象元数据时，加入的自定义元数据将会在返回的消息头中出现。如果请求携带了此头域，那么响应的消息中应该包含此消息头。 其中自定义元数据须满足以下条件： - 所有自定义元数据大小的总和不超过8K。单个自定义元数据大小的计算方式为：每个键和值的UTF-8 编码中的字节总数。  - 自定义元数据的key值不区分大小写，OBS统一转为小写进行存储。value值区分大小写。  - 自定义元数据key-value对都必须符合US-ASCII。如果一定要使用非ASCII码或不可识别字符，需要客户端自行做编解码处理，可以采用URL编码或者Base64编码，服务端不会做解码处理。例如x-obs-meta-中文：中文经URL编码后发送，"中文"的URL编码为：%E4%B8%AD%E6%96%87，则响应为x-obs-meta-%E4%B8%AD%E6%96%87: %E4%B8%AD%E6%96%87   **取值范围：** 无 |
| x-obs-expires                   | Integer   | **参数解释：** 对象过期时间，单位是天。如果请求携带了此头域，那么响应的消息中应该包含此消息头。设置的天数计算出的过期时间不能早于当前时间，如10天前上传的对象，不能设置小于10的值。 **取值范围：** 大于0的整数值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   
#### 响应体 (Response Body)
该请求的响应消息中不带消息元素。
#### 错误响应消息
无特殊错误，所有错误已经包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)中。
#### 请求示例：添加对象元数据
给对象object添加元数据：Content-Type:application/zip和x-obs-meta-test:meta。
```
PUT /object?metadata HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Wed, 01 Jul 2015 14:24:33 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:NxtSMS0jaVxlLnxlO9awaMTn47s=
x-obs-metadata-directive:REPLACE_NEW
Content-Type:application/zip
x-obs-meta-test:meta
```
#### 响应示例：添加对象元数据
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: 8DF400000163D3E4BB5905C41B6E65B6
Accept-Ranges: bytes
x-obs-id-2: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCSD3nAiTaBoeyt9oHp9vTYtXnLDmwV6D
Date: Wed, 01 Jul 2015 04:19:21 GMT
Content-Length: 0
x-obs-metadata-directive:REPLACE_NEW
x-obs-meta-test:meta
```
#### 请求示例：修改对象元数据
对象object已存在元数据x-obs-meta-test:testmeta，且x-obs-storage-class为WARM，将对象object的元数据x-obs-meta-test修改为newmeta，x-obs-storage-class修改为COLD。
```
PUT /object?metadata HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Wed, 01 Jul 2015 14:24:33 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:NxtSMS0jaVxlLnxlO9awaMTn47s=
x-obs-metadata-directive:REPLACE_NEW
x-obs-meta-test:newmeta
x-obs-storage-class:COLD
```
#### 响应示例：修改对象元数据
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: 8DF400000163D3E4BB5905C41B6E65B6
Accept-Ranges: bytes
x-obs-id-2: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCSD3nAiTaBoeyt9oHp9vTYtXnLDmwV6D
Date: Wed, 01 Jul 2015 04:19:21 GMT
Content-Length: 0
x-obs-metadata-directive:REPLACE_NEW
x-obs-meta-test:newmeta
x-obs-storage-class:COLD
```
#### 请求示例：删除对象元数据
对象object已存在元数据x-obs-meta-test:newmeta，Content-Type:application/zip，删除元数据x-obs-meta-test。
```
PUT /object?metadata HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Wed, 01 Jul 2015 14:24:33 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:NxtSMS0jaVxlLnxlO9awaMTn47s=
x-obs-metadata-directive:REPLACE
Content-Type:application/zip
```
#### 响应示例：删除对象元数据
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: 8DF400000163D3E4BB5905C41B6E65B6
Accept-Ranges: bytes
x-obs-id-2: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCSD3nAiTaBoeyt9oHp9vTYtXnLDmwV6D
Date: Wed, 01 Jul 2015 04:19:21 GMT
Content-Length: 0
x-obs-metadata-directive:REPLACE
```
#### 使用SDK调用接口
建议您使用OBS SDK调用接口。SDK对API进行了封装以简化您的开发工作，直接调用SDK接口函数即可访问OBS，无需手动计算签名。
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_0606.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0921.html) | [C](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0404.html) | [Go](https://support.huaweicloud.com/sdk-go-devg-obs/obs_33_0920.html) | [BrowserJS](https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_0506.html) | [.NET](https://support.huaweicloud.com/sdk-dotnet-devg-obs/obs_25_0407.html) | [Android](https://support.huaweicloud.com/sdk-android-devg-obs/obs_26_0406.html) | [iOS](https://support.huaweicloud.com/sdk-ios-devg-obs/obs_27_0405.html) | [PHP](https://support.huaweicloud.com/sdk-php-devg-obs/obs_28_0406.html) | [Node.js](https://support.huaweicloud.com/sdk-nodejs-devg-obs/obs_29_0406.html) |
|---|---|---|---|---|---|---|---|---|---|
   
#### 相关文档
- 使用obsutil修改对象元数据，请参见[设置对象属性](https://support.huaweicloud.com/utiltg-obs/obs_11_0041.html)。
- 了解更多对象元数据相关介绍，请参见[配置、编辑、查看对象元数据](https://support.huaweicloud.com/usermanual-obs/obs_03_0324.html)。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
