阅读806 返回首页    go 网易 go 网易蜂巢


对象操作

目录

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

  上一篇:go 陕西地区管局规则
  下一篇:go 集群API