對象操作
目錄
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