文档中心 > PutObject
PutObject

最近更新时间:2021-12-24

使用PutObject接口添加一个Object到某个Bucket。

如果要使用此接口,你需要具有对要添加对象的空间的 WRITE 权限。

为了保证数据在传输过程中没有损坏,请使用 Content-MD5 头部。当使用此头部时,程序会自动计算出MD5,并根据用户提供的MD5进行校验,如果不匹配,将会返回错误信息。

但是Content-MD5这个头部也可以不选。


请求

请求语法

PUT /ObjectName HTTP/1.1

Host: examplebucket.region.unicloudsrv.com

Date: date

x‐amz‐acl: ACL

Cache‐Control: CacheControl

Content‐Disposition: ContentDisposition

Content‐Encoding: ContentEncoding

Content‐Language: ContentLanguage

Content‐Length: ContentLength

Content‐MD5: ContentMD5

Content‐Type: ContentType

Expires: Expires

x‐amz‐server‐side‐encryption: ServerSideEncryption

x‐amz‐storage‐class: StorageClass

Authorization: authorization string

请求消息头

参数

描述

x-amz-acl

用于对象的预定义权限,private或public-read。

x-amz-storage-class

对象的存储类型,默认为STANDARD。支持的值为:STANDARD、STANDARD_IA、GLACIER。

x-amz-website-redirect-location

如果将存储桶配置为网站,则将对此对象的请求重定向到同一存储桶中的另一个对象或外部URL。

Cache-Control

告诉所有的缓存机制是否可以缓存及哪种类型。更多信息,请点击http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

Content-Disposition

指定对象的表达信息。更多信息,请点击http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1

Content-Encoding

指定文件内容编码格式。更多信息,请点击http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11

Content-Length

指明对象的大小,按字节。更多信息,请点击http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13

Content-MD5

base64加密MD5信息,128位,用于对象完整性校验。

Content-Type

用于描述文件内容MIME格式。更多信息,请点击http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17

Expect

当你使用 100-continue 时,直到收到确认时才会发送请求体。如果头部信息被拒绝,请求体不会被发送。

Expires

对象存在于缓存的有效时间日期。更多信息,请点击http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21


示例

请求示例

PUT /my-image.jpg HTTP/1.1

Host: examplebucket.region.unicloudsrv.com

Date: Wed, 12 Oct 2009 17:50:00 GMT

Authorization: authorization string

Content-Type: text/plain

Content-Length: 11434

x-amz-meta-author: Janet

Expect: 100-continue

[11434 bytes of Object data]

 

HTTP/1.1 100 Continue

返回示例

HTTP/1.1 200 OK

x-amz-id-2: LriYPLdmOdAiIfgSm/F1YsViT1LW94/xUQxMsF7xiEb1a0wiIOIxl+zbwZ163pt7

x-amz-request-id: 0A49CE4060975EAC

Date: Wed, 12 Oct 2009 17:50:00 GMT

ETag: "1b2cf535f27731c974343645a3985328"

Content-Length: 0

Connection: close


自定义元数据

对象元数据是一组名称值 (键值) 对。例如,内容长度的元数据Content-Length是名称 (键) 和对象大小 (以字节为单位的值)。

在上传对象时,您可以将元数据指定给该对象。发送 PUT 或 POST 请求创建对象时,您将以名称-值(键-值)对的形式提供此可选信息。用户定义的元数据名称必须以x-amz-meta-开头,以与其他 HTTP 标准头区分开来。例如:

PUT /my-image.jpg HTTP/1.1
Host: myBucket.s3.unicloud.com
Date: Wed, 12 Oct 2019 17:50:00 GMT
Authorization: authorization string
Content-Type: text/plain
Content-Length: 11434
x-amz-meta-author: Tom
x-amz-meta-price: 10
[11434 bytes of object data]

用户下载此对象时,自定义元数据会原样返回。

对于已经上传的对象,可以通过PutObjectMeta请求进行修改,在对象URL后添加?meta,内容为如下格式的XML:

<MetaConfiguration>
<Headers>
<MetaData>
<key>x-amz-meta-author</key>
<value>Tom</value>
</MetaData>
</Headers>
</MetaConfiguration>

请求中的数据会覆盖原有元数据。

完整请求样例如下:

PUT /my-image.jpg?meta HTTP/1.1
Host: myBucket.s3.unicloud.com
Date: Wed, 12 Oct 2019 17:50:00 GMT
Authorization: authorization string
Content-Type: text/plain
Content-Length: 196
<MetaConfiguration>
<Headers>
<MetaData>
<key>x-amz-meta-author</key>
<value>Tom</value>
<key>x-amz-meta-price</key>
<value>10</value>
</MetaData>
</Headers>
</MetaConfiguration>


版本控制

版本控制是在相同的存储桶中保留对象的多个变量的方法。对于对象存储桶中存储的每个对象,您可以使用版本控制功能来保存、检索和还原它们的各个版本。使用版本控制能够轻松从用户意外操作和应用程序故障中恢复数据。当您为存储桶启用版本控制时,如果对象存储同时收到针对同一对象的多个写入请求,它会存储所有对象。

如果您为存储桶启用版本控制,对象存储会自动为要存储的对象生成唯一版本 ID。例如,在一个存储桶中,您可以拥有两个具有相同键的对象,但版本 ID 却不同。

通过启用了版本控制的存储桶可以恢复因意外删除或覆盖操作而失去的对象。例如:

  • 如果删除对象 (而不是永久移除它),对象存储会插入删除标记,该标记将成为当前对象版本。您始终可以恢复以前的版本。

  • 如果覆盖对象,则会导致存储桶中出现新的对象版本。您始终可以恢复以前的版本。

存储桶可处于以下三种状态之一:未启用 (默认) 、启用版本控制或暂停版本控制。

版本控制状态将应用到该存储桶中的所有 (不是某些) 对象。您第一次对存储桶启用版本控制后,该存储桶中的对象将在之后一直受版本控制,并具有唯一的版本 ID。请注意以下几点:

  • 在您设置版本控制状态之前存储在存储桶中的对象具有版本 IDnull。启用版本控制时,存储桶中的现有对象不会更改。

  • 存储桶拥有者 (或任何具有适当权限的用户) 可以暂停版本控制以停止累积对象版本。暂停版本控制时,存储桶中的现有对象不会更改。更改的是在以后的请求中处理对象的方式。

可以使用类似如下HTTP请求控制某个桶的版本控制设置:

PUT /?versioning HTTP/1.1

Host: Bucket.oss-region.unicloudsrv.com

Content-MD5: ContentMD5

<?xml version="1.0" encoding="UTF-8"?>

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">

<Status>Enabled</Status>

</VersioningConfiguration>

其中,Status可选的值为Enabled或Suspended,即版本控制一旦打开,只可以暂停而不能够完全关闭(否则可能丢失数据)。

Bucket为要设置的桶的名字。