对象操作
目录
DELETE Object
描述
删除一个对象。
语法
DELETE /${ObjectKey} HTTP/1.1 HOST: ${BucketName}.${endpoint} Date: ${date} Authorization: ${signature}
请求参数
参数 | 描述 | 是否必须 |
---|---|---|
ObjectKey | 删除对象的对象名称 类型:字符串 |
Yes |
响应头
Header | 描述 |
---|---|
无特定头部 | 除通用返回头部外,无特殊头部 类型:字符串 |
示例
Request
DELETE /1.jpg HTTP/1.1 HOST: dream.nos-eastchina1.126.net Date: Fri, 10 Feb 2012 21:34:55 GMT Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE
Response
HTTP/1.1 200 OK x-nos-request-id: 17b21e42ac11000001390ab891440240 Date: Wed, 01 Mar 2012 21:34:55 GMT Connection: close Server: NOS
细节描述
1. 如果 Bucket 不存在,返回 404 no content 错误。错误码:NoSuchBucket。
2. 只有 Bucket 的拥有者才能删除 Bucket 中的 Object 。非 Bucket 拥有者执行 DELETE Object 操作将返回 403 Forbidden 错误。错误码:AccessDenied。
3. 如果要删除的 Object 不存在,返回 404- NoSuchKey 。
DELETE Multiple Objects
描述
Delete Multiple Object 操作支持用户通过一个 HTTP 请求删除同一个 Bucket 中的多个 Object。Delete Multiple Object 操作支持一次请求内最多删除1000个 Object,并提供两种返回模式:详细( verbose )模式和简单( quiet )模式:
详细模式: NOS 返回的消息体中会包含每一个删除 Object 的结果。
简单模式: NOS 返回的消息体中只包含删除过程中出错的 Object 结果;如果所有删除都成功的话,则没有消息体。
语法
POST / HTTP/1.1 HOST: ${BucketName}.${endpoint} Content-Length: ${length} Date: ${date} Authorization: ${signature}
请求元素
Element | 描述 |
---|---|
Delete | 多重删除的请求容器元素 类型:容器 |
Quiet | 是否显示具体删除信息 类型:布尔值 父节点:Delete |
Object | 要删除的单个对象的容器元素 类型:容器 父节点:Delete |
Key | 要删除的对象键值 类型:字符串 父节点:Object |
VersionId | 要删除的对象版本号 类型:数字 父节点:Object |
响应头
Element | |
---|---|
DeleteResult | 多重删除的响应容器元素 类型:容器 |
Deleted | 已被成功删除的容器元素 类型:容器 父节点:DeleteResult |
Key | 已删除的对象键值 类型:字符串 父节点:Deleted,Error |
Error | 删除失败的对象版本号 类型:容器 父节点:DeleteResult |
Code | 删除失败返回的错误码 类型:字符串 父节点:Error |
Message | 删除失败返回的详细错误描述 类型:字符串 父节点:Error |
示例
Request
POST /?delete HTTP/1.1 HOST: dream.nos-eastchina1.126.net Content-Length: 123 Content-MD5: cdb586d8ee4952fdcc234e8712ea2bdb Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE <Delete> <Quiet>true</Quiet> <Object> <Key>1.jpg</Key> </Object> <Object> <Key>2.jpg</Key> </Object> </Delete>
Response
HTTP/1.1 200 OK x-nos-request-id: 17b21e42ac11000001390ab891440240 Date: Fri, 02 Feb 2012 01:53:42 GMT Content-Length: 251 Connection: close Server: NOS <?xml version="1.0" encoding="UTF-8"?> <DeleteResult> <Deleted> <Key>1.jpg</Key> </Deleted> <Error> <Key>2.jpg</Key> <Code>AccessDenied</Code> <Message>Access Denied</Message> </Error> <Error> <Key>3.jpg</Key> <Code>NoSuchKey</Code> <Message>No Such Key</Message> </Error> </DeleteResult>
细节描述
1. 如果 Bucket 不存在,返回 404 no content 错误。错误码:NoSuchBucket。
2. 只有 Bucket 的拥有者才能删除 Bucket 中的 Object。非 Bucket 拥有者执行 DELETE multiple Objects 操作将返回 403 Forbidden 错误。错误码:AccessDenied。
3. Delete Multiple Object 请求默认是详细( verbose )模式。
4. 在 Delete Multiple Object 请求中删除一个不存在的 Object,仍然认为是成功的。
5. Delete Multiple Object 的消息体最大允许 2MB 的内容,超过 2MB 会返回 MalformedXML 错误码。
6. Delete Multiple Object 请求最多允许一次删除 1000个 Object;超过1000个 Object 会返回 MalformedXML错误码。
7. 如果 HTTP 请求的 BODY XML 格式有误,返回 400 Bad Request 消息。错误码:MalformedXML。
8. HTTP 请求头 Content-Length 必须,否则返回 411 Length Required 消息。错误码:MissingContentLength。
GET Object
描述
读取对象内容,返回对象流。
语法
GET /${ObjectKey}?download=${download}&ifNotFound=${ifNotFound} HTTP/1.1 HOST: ${BucketName}.${endpoint} Date: ${date} Authorization: ${signature} Range: ${range}
请求参数
参数 | 描述 |
---|---|
download | 通过浏览器打开时,通过指定该值,浏览器将进行下载而非在浏览器中直接打开 当 NOS 发现请求的Url中有该值时,会在响应中增加标准HTTP字段 Content-Disposition,如下: Content-Disposition: attachment; filename=”<file_name>” 类型:字符串(经过urlencode编码) 限制:字符串长度不得超过256字节(未经过编码时) |
ifNotFound | 通过该参数,可以指定当访问的对象不存在时,期望返回的对象内容(注意此时返回值为404) 类型:字符串(经过urlencode编码) |
响应头
参数 | 描述 |
---|---|
Range | 下载指定的数据块,Range Header参考RFC 2616 类型:字符串 默认:无 |
If-Modified-Since | 只有当指定时间之后做过修改操作才返回这个对象,否则返回304(Not Modifed) 类型:字符串 默认:无 |
示例
Request
GET /1.jpg HTTP/1.1 HOST: dream.nos-eastchina1.126.net Date: Fri, 10 Feb 2012 21:34:55 GMT Range: 0-1024 Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE
Response
HTTP/1.1 206 OK x-nos-request-id: 17b21e42ac11000001390ab891440240 Content-Length: 1024 Content-Range: 0-1024/234564 ETag: d41d8cd98f00b204e9800998ecf8427e Date: Wed, 01 Mar 2012 21:34:55 GMT Last-Modified: Tue, 05 Jul 2016 17:32:21 Asia/Shanghai Connection: close Server: NOS [1024 bytes of binary data]
细节描述
1. 如果 Bucket 不存在,返回 404 no content 错误。错误码:NoSuchBucket。
2. NOS 支持匿名读,此时需要设置桶为 Public-read。如果试图读取没有读权限的 Bucket 中的 Object,返回403 Forbidden错误。错误码:AccessDenied。
3. GetObject 通过 range 参数可以支持断点续传,对于比较大的 Object 建议使用该功能。 a) 表示头500个字节:bytes=0-499
b) 表示第二个500字节:bytes=500-999
c) 表示最后500个字节:bytes=-500
d) 表示500字节以后的范围:bytes=500-
Range 设置必须严格符合上述规则,否则返回 416 Requested Range Not Satisfiable 错误。错误码:InvalidRange。
4. 如果文件修改时间早于 If-Modified-Since,返回 304 Not Modified。
5. 如果文件不存在返回 404 Not Found 错误。错误码:NoSuchKey。
6. Get Object 返回的 HTTP 头中还包含对象的 ETag、Content-Type、Last-Modified 等信息。
7. 若指定了 ifNotFound 参数,当访问指定对象不存在时,NOS 会进一步查找 ifNotFound 参数指定的对象,若存在,则返回 ifNotFound 对象内容,返回值为 404,若不存在,则直接返回 NoSuchKey 错误。
8. 如果返回的对象是分块上传对象,etag 不是由对应文件的 md5 生成的。etag 尾部的 -1 无特殊含义,只是作为标志。
HEAD Object
描述
获取对象相关信息,返回对象相关元数据信息。该接口通常也用来判断对象存在性和是否有权限。
语法
HEAD /${ObjectKey} HTTP/1.1 HOST: ${BucketName}.${endpoint} Date: ${date} Authorization: ${signature}
请求参数
参数 | 描述 | 是否必须 |
---|---|---|
ObjectKey | 对象名 类型:字符串 默认:无 |
No |
请求头
Header | 描述 |
---|---|
If-Modified-Since | 只有当指定时间之后做过修改操作才返回这个对象,否则返回304(Not Modifed) 类型:字符串 默认:无 |
示例
Request
HEAD /1.jpg?versionId=3332619744290771 HTTP/1.1 HOST: dream.nos-eastchina1.126.net Date: Fri, 10 Feb 2012 21:34:55 GMT Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE
Response
HTTP/1.1 200 OK x-nos-request-id: 17b21e42ac11000001390ab891440240 Content-Type: image Date: Fri, 02 Feb 2012 01:53:42 GMT Last-Modified: Sun, 1 Jan 2012 12:00:00 GMT ETag: d41d8cd98f00b204e9800998ecf8427e Connection: close Server: NOS
细节描述
1. 不论正常返回 200 OK 还是非正常返回,Head Object 都不返回消息体。所有对象元数据都包含在 HTTP 返回头中。
2. 如果 Bucket 不存在,返回 404 no content 错误。错误码:NoSuchBucket。
3. 只有 Bucket 的拥有者才能获取 Bucket 中 Object 的元数据信息。非 Bucket 拥有者执行 HEAD Object 操作将返回 403 Forbidden 错误。错误码:AccessDenied。
4. 如果对象是分块上传的对象,返回的 etag 不是由该对象对应的文件的 md5 生成的。etag 尾部的 -1 无特殊含义,只是作为标志。
PUT Object
描述
PUT Object接口把对象上传到一个桶中。主要特性有:
- 持久特性,返回成功,则代表对象所有备份已经安全存储。
- 并发特性,对象存储不提供锁机制,同时写一个对象,则后完成的会覆盖前者。
- 数据完整特性,为了保证数据不被损坏,在 Content-MD5头设置对象的MD5摘要,服务器会比对收到的二进制内容。也可以边传输边计算MD5,传完后跟响应的ETag属性对比。
语法
PUT /${ObjectKey} HTTP/1.1 HOST: ${BucketName}.${endpoint} Date: ${date} Content-Length: ${length} Content-MD5: ${md5} Authorization: ${signature}
请求头定义
参数 | 描述 |
---|---|
Content-Length | 对象的大小 类型:字符串 默认:无 |
Content-MD5 | 128位MD5摘要经过Base64编码的值,用来检查网络传输过程中文件是否损坏 类型:字符串 默认:无 |
x-nos-meta- | 以该前缀开头的header都将被认为是用户自定义的元数据,比如:x-nos-meta-title: TITLE 这个header会把title:TITLE作为用户自定义元数据key-value对。 类型:字符串 默认:无 |
示例
Request
PUT /1.jpg HTTP/1.1 HOST: dream.nos-eastchina1.126.net Date: Fri, 10 Feb 2012 21:34:55 GMT Content-Type: image/jpeg Content-Length: 4096 Content-MD5: fbacf535f27731c9771645a39863328 Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE [4096 bytes of Object data]
Response
HTTP/1.1 200 OK x-nos-request-id: 17b21e42ac11000001390ab891440240 Date: Wed, 12 Oct 2012 17:50:00 GMT ETag: fbacf535f27731c9771645a39863328 Connection: close Server: NOS
细节描述
1. 如果 Bucket 不存在,返回404 no content错误。错误码:NoSuchBucket。
2. 只有 Bucket 的拥有者才能向 Bucket 中 PUT Object 。非 Bucket 拥有者执行 PUT Object 操作将返回 403 Forbidden 错误。错误码:AccessDenied。
3. 如果 Put Object 请求带 Content-MD5 头,NOS 会将其与实际上传文件内容的 MD5 值进行对比,如果不一致,说明用户操作有误,或者文件在传输过程中出错,返回 400 Bad Request 错误。错误码:BadDigest。
4. 如果 Put Object 请求不带 Content-MD5 头,NOS 会将收到文件的 MD5 值放在返回给用户的请求头” ETag ”中,以便用户检查 NOS 上的数据和要上传的数据内容一致。
5. PUT Object 请求头中的 Content-Length 必须和 HTTP BODY 的长度一致,否则返回 400 Bad Request 。错误码:IncompleteBody。
6. 如果在 PutObject 的时候,携带以 x-nos-meta- 为前缀的参数,则视为 Meta data,比如 x-nos-meta-location 。一个 Object 可以有多个类似的参数,但所有的 Meta data 总大小不能超过2k。
7. 如果 Head 中没有加入 Content-Length 参数,会返回 411 Length Required 错误。错误码:MissingContentLength。
8.如果用户数据已经达到配额上线,则返回 403 Forbidden 错误。错误码:QuotaExceeded。
9.如果添加文件长度超过 100M,返回错误消息 400 Bad Request。错误码:EntityTooLarge。建议大对象使用分块接口。
10.PUT Object 允许创建空文件。Object 名长度不能超过1000字节,否则错误消息 400 Bad Request。错误码:InvalidArgument。
PUT Object - Copy
描述
远程拷贝操作,生成一个新的对象,相当于”一次GET”+”一次PUT”。
语法
PUT /${DestinationObjectKey} HTTP/1.1 HOST: ${DestinationBucketName}.${endpoint} Date: ${date} x-nos-copy-source: /${SourceBucketName}/${SourceObjectKey} Authorization: ${signature}
请求头
Header | 描述 | 是否必须 |
---|---|---|
x-nos-copy-source | 拷贝的源对象 类型:字符串 默认:无 限制:该字符串必须做一下URL Encode,并且对该桶有读权限 |
YES |
示例
Request
PUT /2.jpg HTTP/1.1 HOST: photo.nos-eastchina1.126.net Date: Fri, 10 Feb 2012 21:34:55 GMT x-nos-move-source: /dream/1.jpg Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE
Response
HTTP/1.1 200 OK x-nos-request-id: 17b21e42ac11000001390ab891440240 Date: Wed, 01 Mar 2012 21:34:55 GMT Connection: close Server: NOS
PUT Object - Move
描述
远程移动操作,生成一个新的对象,相当于”一次COPY”+”一次DELETE”,但不涉及物理文件的 拷贝动作,仅仅修改元数据,不支持跨桶 move 操作。
语法
PUT /${DestinationObjectKey} HTTP/1.1 HOST: ${DestinationBucketName}.${endpoint} Date: ${date} x-nos-move-source: /${SourceBucketName}/${SourceObjectKey} Authorization: ${signature}
请求头定义
参数 | 描述 | 是否必须 |
---|---|---|
x-nos-move-source | 对象原来的桶号和名称 类型:字符串 默认:无 限制:该字符串必须做一下URL Encode,并且对该桶有读权限 |
YES |
示例
Request
PUT /1.jpg HTTP/1.1 HOST: dream.nos-eastchina1.126.net Date: Fri, 10 Feb 2012 21:34:55 GMT Content-Type: image/jpeg Content-Length: 4096 Content-MD5: fbacf535f27731c9771645a39863328 Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE [4096 bytes of Object data]
Response
HTTP/1.1 200 OK x-nos-request-id: 17b21e42ac11000001390ab891440240 Date: Wed, 12 Oct 2012 17:50:00 GMT ETag: fbacf535f27731c9771645a39863328 Connection: close Server: NOS
PUT Obejct Meta
描述
修改获取对象时的 HTTP 响应的响应首部。
语法
PUT /${ObjectKey}?meta HTTP/1.1 HOST: ${BucketName}.${endpoint} Date: ${date} Content-Length: ${length} Content-MD5: ${md5} Authorization: ${signature} Content-Type: ${type} Content-Encoding: ${encoding} Cache-Control : ${cache-control} Expires : ${expires} Content-Disposition : ${disposition} Content-Language : ${language}
请求头
Header | 描述 | 是否必须 |
---|---|---|
Content-Type | 对象所属类型 类型:字符串 默认:application/octet-stream |
NO |
Content-Encoding | 对象编码格式 类型:字符串 默认:无 |
NO |
Cache-Control | 对象缓存控制 类型:字符串 默认:无 |
NO |
Expires | 缓存的失效日期 类型:字符串 默认:无 |
NO |
Content-Disposition | 对象的默认文件名 类型:字符串 默认:无 |
NO |
Content-Language | 对象内容所属语言 类型:字符串 默认:无 |
NO |
x-nos-meta- | 以该前缀开头的header都将被认为是用户自定义的元数据,比如:x-nos-meta-title: TITLE 这个header会把title:TITLE作为用户自定义元数据key-value对。 类型:字符串 默认:无 |
NO |
示例
Request
PUT /2.jpg?meta HTTP/1.1 HOST: photo.nos-eastchina1.126.net Date: Fri, 10 Feb 2012 21:34:55 GMT Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE Content-Type: image/jpeg Content-Encoding: utf-8 Cache-Control: max-age=0 Expires: Fri, 10 Feb 2012 21:34:55 GMT Content-Language: en
Response
HTTP/1.1 200 OK x-nos-request-id: 17b21e42ac11000001390ab891440240 Date: Wed, 01 Mar 2012 21:34:55 GMT Connection: close Server: NOS
细节描述
1. 如果要修改的 Object 不存在,返回 404 Not Found。
2. 如果用户输入非法的 Content-Type 则 Content-Type 自动为 application/octet-stream ,其他参数不检验合法性。
3.如果用户使用 PutObjectMeta 接口中没有指定某项元数据,那么认为该元数据在本次修改中设置为空;如果 Content-Type 没有指定,统一把 Content-type 修改为 application/octet-stream。
4.Content-Disposition 如果没有对应的记录,使用 GET Object 接口时通过默认的规则返回。默认的规则是根据对象的 objectname生成。
5.本接口的权限控制类型与PUT Object一致。
最后更新:2017-01-03 10:48:53