PutObject

Put Object用于上传文件。

请求语法

PUT /mss-test-bucket/my-image.jpg HTTP/1.1
Content-Length:ContentLength
Content-Type: ContentType
Host: mtmss.com
Date: GMT Date
Authorization: SignatureValue

请求头部

名称 描述
Cache-Control 指定该 Object 被下载时的网页的缓存行为;更详细描述请参照 RFC 2616
类型:字符串
默认值:无
Content-Disposition 指定该 Object 被下载时的名称;更详细描述请参照 RFC 2616
类型:字符串
默认值:无
Content-Encoding 指定该 Object 被下载时的内容编码格式;更详细描述请参照 RFC 2616
类型:字符串
默认值:无
Content-MD5 根据协议 RFC 1864对消息内容(不包括头部)计算 MD5 值获得 12 8比特位数字,对该数字进行 base64 编码为一个消息的 Content-MD5 值。该请求头可用于消息合法性的检查(消息内容是否与发送时一致)。
类型:字符串
默认值:无
Expires 过期时间(milliseconds);更详细描述请参照 RFC 2616
类型:字符串
默认值:无
x-amz-meta- 用户自定义变量,其中一个用处是:用户客户端加密时,设置秘钥对相关信息。
类型:字符串
默认值:无

响应头部

名称 描述
ETag ETag (entity tag) 在每个 Object 生成的时候被创建,ETag 值是该 Object 内容的 uuid,可以用于检查该 Object 内容是否发生变化。
类型:字符串

细节分析

  1. 如果用户请求携带了 Content-MD5 请求头,MSS 会计算 body 的 Content-MD5 并检查一致性,如果不一致,将返回 InvalidDigest 错误码。
  2. 如果试图添加的 Object 的同名文件已经存在,并且有访问权限,新添加的文件将覆盖原来的文件,成功返回 200 OK。
  3. 如果在 PutObject 的时候,携带以 x-amz-meta- 为前缀的参数,则视为 user meta,比如 x-awz-meta-location。一个 Object 可以有多个类似的参数。
  4. 如果试图添加的 Object 所在的 Bucket 不存在,返回 404 Not Found错误。错误码:NoSuchBucket。
  5. 如果试图添加的 Object 所在的 Bucket 没有访问权限,返回 403 Forbidden 错误。错误码:AccessDenied。
  6. 如果传入的 Object key 长度大于1023字节,返回 400 Bad Request。错误码:KeyTooLong。
  7. PUT 一个 Object 的时候,MSS支持5个 HTTP RFC 2616 协议规定的Header 字段:Cache-Control、Expires、Content-Encoding、Content-Disposition、Content-Type。如果上传 Object 时设置了这些 Header ,则这个 Object 被下载时,相应的 Header 值会被自动设置成上传时的值。
  8. 响应头 Etag 生成方法:数据的 md5 值的 Hex 值。用户请求携带的 Content-MD5 计算方法:数据的 md5 值的 base64 编码值。

示例

请求示例:

PUT /mss-test-bucket/my-image.jpg HTTP/1.1
Host: mtmss.com
Content-Type: text/plain
Content-Length: 11434
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: authorization string

返回示例:

HTTP/1.1 200 OK
Date: Wed, 28 Oct 2009 22:32:00 GMT
Content-Length: 0
ETag: "fba9dede5f27731c9771645a39863338"
Server: MeituanStorageService
X-Amz-Id-2: bb23c316f37ac11e3455df7d6b041a7e
X-Amz-Request-Id: 1511335933303653
X-Mss-Trace-Id: 117546520333544383

Copy Object

拷贝一个在 MSS 上已经存在的 object 成另外一个 object,可以发送一个 PUT 请求给 MSS,并在 PUT 请求头中添加元素“x-amz-copy-source”来指定拷贝源。MSS 会自动判断出这是一个 Copy 操作,并直接在服务器端执行该操作。如果拷贝成功,则返回新的 object 信息给用户。

请求语法

PUT /dstBucket/dstObject HTTP/1.1
Host: mtmss.com
Content-Length: ContentLength
Date: GMT Date
Authorization: authorization string
x-amz-copy-source: /sourceBucket/sourceObject
x-amz-metadata-directive: metadata_directive
x-amz-copy-source-if-match: etag
x-amz-copy-source-if-none-match: etag
x-amz-copy-source-if-unmodified-since: time_stamp
x-amz-copy-source-if-modified-since: time_stamp

请求头部

名称 描述 是否必须
x-amz-copy-source 复制源地址(必须有可读权限)
类型:字符串
默认值:无
x-amz-metadata-directive 有效值为 COPY 和 REPLACE 。如果该值设为 COPY,则新的 Object 的 meta 都从源 Object 复制过来;如果设为 REPLACE,则忽视所有源 Object 的 meta 值,而采用用户这次请求中指定的 meta 值;其他值则返回 400 HTTP 错误码。
类型:字符串
默认值:COPY
有效值:COPY、REPLACE
x-amz-copy-source-if-match 如果源 Object 的 ETag 值和用户提供的 ETag 相等,则执行拷贝操作,并返回 200 OK;否则返回 412 PreconditionFailed。
类型:字符串
默认值:无
x-amz-copy-source-if-none-match 如果源 Object 的 ETag 值和用户提供的 ETag不相等,则执行拷贝操作,并返回 200 OK;否则返回 412 PreconditionFailed。
类型:字符串
默认值:无
x-amz-copy-source-if-unmodified-since 如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件,并返回 200 OK;否则返回 412 PreconditionFailed。
类型:字符串
默认值:无
时间格式:GMT 时间,例如 Wed, 12 Oct 2009 17:50:00 GMT
x-amz-copy-source-if-modified-since 如果源 Object 自从用户指定的时间以后被修改过,则执行拷贝操作,并返回 200 OK;否则返回 412 PreconditionFailed。
类型:字符串
默认值:无
时间格式:GMT 时间,例如 Wed, 12 Oct 2009 17:50:00 GMT

响应元素(Response Elements)

名称 描述
CopyObjectResult Copy Object 结果
类型:字符串
默认值:无
ETag ETag (entity tag) 在每个 Object 生成的时候被创建,ETag 值是该 Object 内容的 uuid,可以用于检查该 Object 内容是否发生变化。
类型:字符串
LastModified 新 Object 最后更新时间。
类型:字符串
父元素:CopyObjectResult

细节分析

  1. 可以通过拷贝操作来实现修改已有 Object 的 meta 信息,需拷贝操作的源 Object 地址和目标 Object 地址相同。此时如果 x-amz-metadata-directive 不存在或不为 REPLACE 为时,返回 400 InvalidArgument。
  2. MSS 支持拷贝操作的四个预判断 Headerk 可以不使用或者单独出现或者 Mach 与 UnModified 同时出现或者 UnMatch与Modified 同时出现,否则返回 400 InvalidArgument。组合出现时,只有两个都通过才返回 200,否则返回 412。
  3. 拷贝操作需要请求者对源 Object 有读权限和目标 bucket 的写权限。
  4. 拷贝操作的计费统计会对源 Object 所在的 Bucket 增加一次 Get 请求次数,并对目标 Object 所在的 Bucket 增加一次 Put 请求次数,以及相应的新增存储空间。
  5. 拷贝操作涉及到的请求头,都是以“x-amz-”开头的,所以要加入签名字符串中。

示例

请求示例:

PUT /mss-dest-bucket/copy-object HTTP/1.1
Host: mtmss.com
Content-Length: 233
Date: Wed, 22 Nov 2017 15:32:00 GMT
x-amz-copy-source: /mss-src-bucket/src-object
Authorization: authorization string

返回示例:

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 184
Date: Wed, 22 Nov 2017 15:32:00 GMT
Server: MeituanStorageService
X-Amz-Id-2: bb23c316f37ac11e3455df7d6b041a7e
X-Amz-Request-Id: 1511335933303653
X-Mss-Trace-Id: 1175465203335443831

<?xml version="1.0" encoding="UTF-8"?>
<CopyObjectResult>
    <LastModified>2017-11-22T04:04:57.000Z</LastModified>
    <ETag>"0f343b0931126a20f133d67c2b018a3b"</ETag>
</CopyObjectResult>

Get Object

获取某个Object,此操作要求用户对该Object有读权限。

请求语法

GET /mss-test-bucket/my-obj HTTP/1.1
Host: mtmss.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: authorization string
Range: bytes=ByteRange(可选)

请求头部

名称 描述
Range 指定文件传输的范围。如,设定 bytes=0-9,表示传送第0到第9这10个字符。
类型:字符串
默认值:无
If-Modified-Since 如果指定的时间早于实际修改时间,则正常传送文件,并返回 200 OK;否则返回 304 not modified
类型:字符串
默认值:无
时间格式:GMT 时间,例如 Wed, 12 Oct 2009 17:50:00 GMT
If-Unmodified-Since 如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件,并返回 200 OK;否则返回 412 precondition failed错误
类型:字符串
默认值:无
时间格式:GMT 时间,例如 Wed, 12 Oct 2009 17:50:00 GMT
If-Match 如果传入期望的 ETag 和 object 的 ETag 匹配,则正常传输文件,并返回 200 OK;否则返回 412 precondition failed错误
类型:字符串
默认值:无
If-None-Match 如果传入的 ETag 值和 Object 的 ETag 不匹配,则正常传输文件,并返回 200 OK;否则返回 304 Not Modified
类型:字符串
默认值:无

响应头部

名称 描述
x-amz-meta-* 用户自定义变量,其中一个用处是:用户客户端加密时,秘钥对相关信息基于该字段返回。
类型: 字符串

细节分析

  1. GetObject 通过 range 参数可以支持断点续传,对于比较大的 Object 建议使用该功能。
  2. 如果在请求头中使用 Range 参数;则返回消息中会包含整个文件的长度和此次返回的范围,例如:Content-Range: bytes 0-9/44,表示整个文件长度为44,此次返回的范围为0-9。range 参数可以为"0-9", "-9", "1-10", "1-", 如果参数不符合规范,返回 416 InvalidRange。
  3. 如果“If-Modified-Since” 或者 “If-Unmodified-Since”元素中设定的时间不符合规范,返回 400 InvalidArgument。
  4. If-Modified-Since 和 If-Unmodified-Since 可以同时存在,If-Match 和 If-None-Match 也可以同时存在, 不能有其他组合,否则返回 400 InvalidArgument。
  5. 如果包含 If-Unmodified-Since 并且不符合或者包含 If-Match 并且不符合,返回 412 precondition failed。
  6. 如果包含 If-Modified-Since 并且不符合或者包含 If-None-Match 并且不符合,返回 304 Not Modified。
  7. 如果文件不存在,返回 404 NoSuchKey。

示例

请求示例:

GET /mss-test-bucket/my-obj HTTP/1.1
Host: mtmss.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: authorization string

返回示例:

HTTP/1.1 200 OK
Date: Wed, 28 Oct 2009 22:32:00 GMT
Last-Modified: Wed, 12 Oct 2009 17:50:00 GMT
ETag: "fba9dede5f27731c9771645a39863328"
Content-Length: 434234
Content-Type: text/plain
Server: MeituanStorageService
X-Amz-Id-2: bb23c316f37ac11e3455df7d6b041a7e
X-Amz-Request-Id: 1511335933303653
X-Mss-Trace-Id: 1175465203335443831

带range的请求示例:

GET /mss-test-bucket/my-obj HTTP/1.1
Host: mtmss.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Range: bytes=101-900
Authorization: authorization string

响应示例:

HTTP/1.1 200 OK
Date: Wed, 28 Oct 2009 22:32:00 GMT
Last-Modified: Wed, 12 Oct 2009 17:50:00 GMT
ETag: "fba9dede5f27731c9771645a39863328"
Content-Range: bytes 101-900/434234
Content-Length: 801
Content-Type: text/plain
Server: MeituanStorageService
X-Amz-Id-2: bb23c316f37ac11e3455df7d6b041a7e
X-Amz-Request-Id: 1511335933303653
X-Mss-Trace-Id: 1175465203335443831

Head Object

Head Object 用于获取某个 Object 的 meta 信息,不返回文件内容。

请求语法

HEAD /mss-test-bucket/my-obj HTTP/1.1
Host: mtmss.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: authorization string

响应头部

名称 描述
x-amz-meta-* 用户自定义变量,其中一个用处是:用户客户端加密时,秘钥对相关信息基于该字段返回。
类型: 字符串

细节分析

  1. 不论正常返回 200 OK 还是非正常返回,Head Object 都不返回消息体。
  2. 如果用户在 PutObject 的时候传入以 x-amz-meta- 为开头的 user meta,比如 x-amz-meta-s3cmd-attrs,返回消息时,返回这些 user meta。
  3. 如果文件不存在返回 404 Not Found 错误。

示例

请求示例:

HEAD /mss-test-bucket/my-obj HTTP/1.1
Host: mtmss.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: authorization string

返回示例:

HTTP/1.1 200 OK
Content-Length: 270
Content-Type: text/plain
Date: Wed, 28 Oct 2009 22:32:00 GMT
ETag: "fba9dede5f27731c9771645a39863328"
Last-Modified: Wed, 12 Oct 2009 17:50:00 GMT
Server: MeituanStorageService
X-Amz-Id-2: bb23c316f37ac11e3455df7d6b041a7e
X-Amz-Request-Id: 1511335933303653
X-Mss-Trace-Id: 1175465203335443831

Post Object

Post Object 使用 HTML 表单上传文件到指定 bucket。Post 作为 Put 的替代品,使得基于浏览器上传文件到 bucket 成为可能。Post Object 的消息实体通过多重表单格式(multipart/form-data)编码,在 Put Object 操作中参数通过 HTTP 请求头传递,在 Post 操作中参数则作为消息实体中的表单域传递。

请求语法

POST /mss-test-bucket/ HTTP/1.1
Host: mtmss.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: authorization string

User-Agent: browser_data
Content-Length:ContentLength
Content-Type: multipart/form-data; boundary=9431149156168

--9431149156168
Content-Disposition: form-data; name="key"

key
--9431149156168
Content-Disposition: form-data; name="success_action_redirect"

success_redirect
--9431149156168
Content-Disposition: form-data; name="Content-Disposition"

attachment;filename=mss_download.jpg
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-uuid"

myuuid
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-tag"

mytag
--9431149156168
Content-Disposition: form-data; name="AWSAccessKeyId"

access-key-id
--9431149156168
Content-Disposition: form-data; name="policy"

encoded_policy
--9431149156168
Content-Disposition: form-data; name="Signature"

signature
--9431149156168
Content-Disposition: form-data; name="file"; filename="MyFilename.jpg"
Content-Type: image/jpeg

file_content
--9431149156168
Content-Disposition: form-data; name="submit"

Upload to MSS
--9431149156168--

表单域

名称 描述 是否必须
AWSAccessKeyIdBucket 拥有者的 Access Key Id。
类型:字符串
默认值:无
限制:当 bucket 非 public-read-write 或者提供了 policy(或Signature)表单域时,必须提供该表单域。
policy policy规定了请求的表单域的合法性。不包含 policy 表单域的请求被认为是匿名请求,并且只能访问 public-read-write的bucket。更详细描述请参考下文 Post Policy。
类型:字符串
默认值:无
限制:当 bucket 非 public-read-write 或者提供了 MSS AccessKeyId(或Signature)表单域时,必须提供该表单域。
Signature 根据 Access Key Secret 和 policy 计算的签名信息,MSS 验证该签名信息从而验证该 Post 请求的合法性。更详细描述请参考下文 Post Signature。
类型:字符串
默认值:无
限制:当 bucket 非 public-read-write 或者提供了 MSS AccessKeyId(或policy)表单域时,必须提供该表单域。
Cache-Control, Content-Type, Content-Disposition, Content-Encoding, Expires REST请求头,更多的信息见 [Put Object]()。
类型:字符串
默认值:无
file 文件或文本内容,必须是表单中的最后一个域。浏览器会自动根据文件类型来设置 Content-Type,会覆盖用户的设置。 MSS一次只能上传一个文件。
类型:字符串
默认值:无
key 上传文件的 object 名称。 如果需要使用用户上传的文件名称作为 object 名,使用 ${filename} 变量。例如:如果用户上传了文件 b.jpg,而 key 域的值设置为 /user/a/${filename},最终的 object 名为 /user/a/b.jpg。 如果文件名包含路径,则去除文件名中的路径,例如用户上传了文件 a/b/c/b.jpg,则取文件名为 b.jpg,若 key 域的值设置为 /user/a/${filename},最终的 object 名为 /user/a/b.jpg
类型:字符串
默认值:无
successactionredirect 上传成功后客户端跳转到的 URL,如果未指定该表单域,返回结果由 successactionstatus 表单域指定。如果上传失败,MSS返回错误码,并不进行跳转。
类型:字符串
默认值:无
successactionstatus 未指定 successactionredirect 表单域时,该表单域指定了上传成功后返回给客户端的状态码。 接受值为 200, 201, 204(默认)。 如果该域的值为 200 或者 204,MSS 返回一个空文档和相应的状态码。 如果该域的值设置为 201,MSS 返回一个 XML 文件和 201 状态码。 如果其值未设置或者设置成一个非法值,MSS 返回一个空文档和 204 状态码。
类型:字符串
默认值:无
x-amz-meta-* 用户指定的 user meta 值。
类型:字符串
默认值:无
x-amz-security-token 若本次访问是使用 STS 临时授权方式,则需要指定该项为 SecurityToken 的值,同时 MSSAccessKeyId 需要使用与之配对的临时 AccessKeyId,计算签名时,与使用普通 AccessKeyId 签名方式一致。
类型:字符串
默认值:无

响应元素(Response Elements)

名称 描述
PostResponse 保持 Post 请求结果的容器。
类型:容器
子节点:Bucket, ETag, Key, Location
Bucket Bucket 名称。
类型:字符串
父节点:PostResponse
ETag ETag (entity tag) 在每个 Object 生成的时候被创建,Post 请求创建的 Object,ETag 值是该 Object 内容的 uuid,可以用于检查该 Object 内容是否发生变化。
类型:字符串
父节点:PostResponse
Location 新创建 Object 的 URL。
类型:字符串
父节点:PostResponse

细节分析

  1. 进行 Post 操作要求对 bucket 有写权限。与 Put 操作不同,Post 操作使用 AccessKeySecret 对 policy 进行签名计算出签名字符串作为 Signature 表单域的值,MSS 会验证该值从而判断签名的合法性。
  2. post 操作提交表单编码必须为“multipart/form-data”,即 header 中 Content-Type 为 multipart/form-data;boundary=xxxxxx 这样的形式,boundary 为边界字符串。
  3. 提交表单的 URL 为 bucket 域名即可,不需要在 URL 中指定 object 。即请求行是 POST / HTTP/1.1,不能写成 POST /ObjectName HTTP/1.1
  4. policy 规定了该次 Post 请求中表单域的合法值,MSS 会根据 policy 判断请求的合法性,如果不合法会返回错误码:AccessDenied。在检查 policy 合法性时,policy 中不涉及的表单域不进行检查。
  5. 表单和 policy 必须使用 UTF-8 编码,policy 为经过 UTF-8 编码和 base64 编码的 JSON。
  6. Post 请求中可以包含额外的表单域,MSS 会根据 policy 对这些表单域检查合法性。
  7. 如果用户上传了 Content-MD5 请求头,MSS 会计算 body 的 Content-MD5 并检查一致性,如果不一致,将返回 InvalidDigest 错误码。
  8. 如果 POST 请求中包含 Header 签名信息或 URL 签名信息,MSS 不会对它们做检查。
  9. 如果请求中携带以 x-amz-meta- 为前缀的表单域,则视为 user meta,比如 x-amz-meta-s3cmd-attrs。
  10. Post 请求的 body 总长度不允许超过5G。若文件长度过大,会返回错误码:EntityTooLarge。
  11. 表单域为大小写不敏感的,但是表单域的值为大小写敏感的。

示例

请求示例:

POST /mss-test-bucket/ HTTP/1.1
Host: mtmss.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: authorization string


User-Agent: browser_data
Content-Length:ContentLength
Content-Type: multipart/form-data; boundary=9431149156168

--9431149156168
Content-Disposition: form-data; name="key"

key
--9431149156168
Content-Disposition: form-data; name="success_action_redirect"

success_redirect
--9431149156168
Content-Disposition: form-data; name="Content-Disposition"

attachment;filename=mss_download.jpg
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-uuid"

myuuid
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-tag"

mytag
--9431149156168
Content-Disposition: form-data; name="MSSAccessKeyId"

access-key-id
--9431149156168
Content-Disposition: form-data; name="policy"

encoded_policy
--9431149156168
Content-Disposition: form-data; name="Signature"

signature
--9431149156168
Content-Disposition: form-data; name="file"; filename="MyFilename.jpg"
Content-Type: image/jpeg

file_content
--9431149156168
Content-Disposition: form-data; name="submit"

Upload to MSS
--9431149156168--

返回示例:

HTTP/1.1 200 OK
Content-Length: 0
Date: Wed, 28 Oct 2009 22:32:00 GMT
ETag: "fba9dede5f27731c9771645a39863328"
Server: MeituanStorageService
X-Amz-Id-2: bb23c316f37ac11e3455df7d6b041a7e
X-Amz-Request-Id: 1511335933303653
X-Mss-Trace-Id: 1175465203335443831

Post Policy

Post 请求的 policy 表单域用于验证请求的合法性。 policy 为一段经过 UTF-8 和 base64 编码的 JSON 文本,声明了 Post 请求必须满足的条件。

policy示例

{ "expiration": "2014-12-01T12:00:00.000Z",
 "conditions": [
 {"bucket": "johnsmith" },
 ["starts-with", "$key", "user/eric/"]
 ]
}

Post policy中必须包含expiration和condtions。

Expiration

Expiration 项指定了 policy 的过期时间,以 ISO8601 GMT 时间表示。例如”2014-12-01T12:00:00.000Z”指定了 Post 请求必须发生在 2014年12月1日12 点之前。

Conditions

Conditions 是一个列表,可以用于指定 Post 请求的表单域的合法值。注意:表单域对应的值在检查 policy 之后进行扩展,因此,policy 中设置的表单域的合法值应当对应于扩展之前的表单域的值。例如,如果设置 key 表单域为 user/user1/${filename},用户的文件名为 a.txt,则 Post policy 应当设置成 [“eq”, “$key”, “user/user1/\${filename}”],而不是 [“eq”, “$key”,“$key”, “user/user1/a.txt”]。Policy 中支持的 conditions 项见下表:

名称 描述
content-length-range 上传文件的最小和最大允许大小。 该 condition 支持 contion-length-range 匹配方式。
Cache-Control, Content-Type, Content-Disposition, Content-Encoding, Expires HTTP 请求头。 该 condition 支持精确匹配和 starts-with 匹配方式。
key 上传文件的 object 名称。 该 condition 支持精确匹配和 starts-with 匹配方式。
successactionredirect 上传成功后的跳转 URL 地址。 该 condition 支持精确匹配和 starts-with 匹配方式。
successactionstatus 未指定 successactionredirect 时,上传成功后的返回状态码。 该 condition 支持精确匹配和 starts-with 匹配方式。
x-amz-meta-* 用户指定的 user meta。 该 condition 支持精确匹配和 starts-with 匹配方式。

如果 Post 请求中包含其他的表单域,可以将这些额外的表单域加入到 policy 的 conditions 中,conditions 不涉及的表单域将不会进行合法性检查。

Conditions匹配方式

Conditions匹配方式 描述
精确匹配 表单域的值必须精确匹配 conditions 中声明的值。如指定 key 表单域的值必须为a: {“key”: “a”} 同样可以写为: [“eq”, “$key”, “a”]
Starts With 表单域的值必须以指定值开始。例如指定 key 的值必须以 /user/user1 开始: [“starts-with”, “$key”, “/user/user1”]
指定文件大小 指定所允许上传的文件最大大小和最小大小,例如允许的文件大小为1到10字节: [“content-length-range”, 1, 10]

转义字符

由于在 Post policy 中 $ 表示变量,所以如果要描述 $,需要使用转义字符\$。除此之外,JSON 将对一些字符进行转义。下图描述了 Post policy 的 JSON 中需要进行转义的字符。

转义字符 描述
\/ 斜杠
|反斜杠
\” 双引号
\$ 美元符
\b 空格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\uxxxx Unicode 字符

Post Signature

对于验证的 Post 请求,HTML 表单中必须包含 policy 和 Signature 信息。policy 控制请求中那些值是允许的。计算 Signature 的具体流程为:

  1. 创建一个 UTF-8 编码的 policy。
  2. 将 policy 进行 base64 编码,其值即为 policy 表单域该填入的值,将该值作为将要签名的字符串。
  3. 使用 AccessKeySecret 对要签名的字符串进行签名,签名方法与 Head 中签名的计算方法相同(将要签名的字符串替换为 policy 即可)。

Delete Object

Delete Object 用于删除某个 object。

请求语法

DELETE /mss-test-bucket/object1? HTTP/1.1
Host: mtmss.com
Content-Length: 0
Date: Fri, 10 Feb 2012 21:34:55 GMT
Authorization: authorization string

细节分析

  1. DeleteObject 要求对该 Object 要有写权限。
  2. 如果要删除的 Object 不存在或者 Bucket 不存在,返回 404 Not Found。

示例

请求示例:

DELETE /mss-test-bucket/object1? HTTP/1.1
Host: mtmss.com
Content-Length: 0
Date: Fri, 10 Feb 2012 21:34:55 GMT
Authorization: authorization string

返回示例:

HTTP/1.1 204 NoContent
Date: Fri, 10 2012 21:34:56 GMT
X-Amz-Id-2: bb23c316f37ac11e3455df7d6b041a7e
X-Amz-Request-Id: 1511335933303653
X-Mss-Trace-Id: 1175465203335443831

Delete Multiple Objects

DeDelete Multiple Objects 操作支持一次请求内最多删除1000个 Object,并提供两种返回模式:详细(verbose)模式和简单(quiet)模式:

  • 详细模式:OSS 返回的消息体中会包含每一个删除 Object 的结果。
  • 简单模式:OSS 返回的消息体中只包含删除过程中出错的 Object 结果;如果所有删除都成功的话,则没有消息体。

请求语法

POST  /mss-test-bucket?delete HTTP/1.1
Host: mtmss.com
Date: GMT Date
Content-Length: ContentLength
Content-MD5: MD5Value
Authorization: SignatureValue

<?xml version="1.0" encoding="UTF-8"?>
<Delete>
  <Quiet>true</Quiet>
  <Object>
    <Key>key</Key>
  </Object>
…
</Delete>

请求元素

名称 描述
Delete 保存 Delete Multiple Object 请求的容器。
类型:容器
子节点:一个或多个 Object 元素,可选的 Quiet 元素
父节点: None.
Quiet 打开“简单”响应模式的开关。
类型:枚举字符串
有效值:true、false
默认值:false
父节点:Delete
Object 保存一个 Object 信息的容器。
类型:容器
子节点:key
父节点:Delete
Key 被删除 Object 的名字。
类型:字符串
父节点:Object

响应元素

名称 描述
DeleteResult 保存Delete Multiple Object请求结果的容器。
类型:容器
子节点:Deleted
父节点:None
Deleted 保存被成功删除的Object的容器。
类型:容器
子节点:Key
父节点:DeleteResult
Key OSS执行删除操作的 Object 名字。
类型:字符串
父节点:Deleted
Error 保存删除失败的 Object 的容器。
类型:容器
子节点:Key
父节点:DeleteResult

细节分析

  1. Delete Multiple Objects 请求必须填 Content-Length 和 Content-MD5 字段。MSS 会根据这些字段验证收到的消息体是正确的,之后才会执行删除操作。
  2. 生成 Content-MD5 字段内容方法:首先将 Delete Multiple Object 请求内容经过 MD5 加密后得到一个128位字节数组;再将该字节数组用 base64 算法编码;最后得到的字符串即是 Content-MD5 字段内容。
  3. Delete Multiple Objects 请求默认是详细(verbose)模式。
  4. 在 Delete Multiple Objects 请求中删除一个不存在的 Object,仍然认为是成功的。
  5. Delete Multiple Objects 请求最多允许一次删除1000个Object;超过1000个 Object 或者不存在 object 会返回 InvalidRequest错误码。
  6. 如果用户上传了 Content-MD5 请求头,MSS 会计算 body 的 Content-MD5 并检查一致性,如果不一致,将返回 InvalidDigest 错误码。

示例

请求示例:

POST  /mss-test-bucket?delete HTTP/1.1
Host: mtmss.com
Content-Length: 11434
Content-MD5: ohhnqLBJFiKkPSBO1eNaUA==
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: authorization string


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

<Delete>
  <Quiet>false</Quiet>
  <Object>
    <Key>my-image1.jpg</Key>
  </Object> 
  <Object>
    <Key>my-image2.jpg</Key>
  </Object>
</Delete>

返回示例:

HTTP/1.1 200 OK
Date: Wed, 28 Oct 2009 22:32:00 GMT
Content-Length: 244
Content-Type: application/xml
Connection: keep-alive
Server: MeituanStorageService
x-amz-request-id: 1511257390801578
x-amz-id-2: bb23c316f37ac11e3455df7d6b041a7e
x-mss-trace-id: 1175465203331184840

<?xml version="1.0" encoding="UTF-8"?>
<DeleteResult>
    <Deleted>
       <Key>my-image1.jpg</Key>
    </Deleted>
    <Deleted>
       <Key>my-image2.jpg</Key>
    </Deleted>
</DeleteResult>