751
魔獸
AppendObject__關於Object操作_API 參考_對象存儲 OSS-阿裏雲
Append Object以追加寫的方式上傳文件。通過Append Object操作創建的Object類型為Appendable Object,而通過Put Object上傳的Object是Normal Object。
請求語法
POST /ObjectName?append&position=Position HTTP/1.1
Content-Length:ContentLength
Content-Type: ContentType
Host: BucketName.oss.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
請求Header
名稱 | 描述 |
---|---|
Cache-Control | 指定該Object被下載時的網頁的緩存行為;更詳細描述請參照RFC2616。 類型:字符串 默認值:無 |
Content-Disposition | 指定該Object被下載時的名稱;更詳細描述請參照RFC2616。 類型:字符串 默認值:無 |
Content-Encoding | 指定該Object被下載時的內容編碼格式;更詳細描述請參照RFC2616。 類型:字符串 默認值:無 |
Content-MD5 | 根據協議RFC 1864對消息內容(不包括頭部)計算MD5值獲得128比特位數字,對該數字進行base64編碼為一個消息的Content-MD5值。該請求頭可用於消息合法性的檢查(消息內容是否與發送時一致)。雖然該請求頭是可選項,OSS建議用戶使用該請求頭進行端到端檢查。 類型:字符串 默認值:無 限製:無 |
Expires | 過期時間;更詳細描述請參照RFC2616。 類型:整數 默認值:無 |
x-oss-server-side-encryption | 指定oss創建object時的服務器端加密編碼算法。 類型:字符串 合法值:AES256 |
x-oss-object-acl | 指定oss創建object時的訪問權限。 類型:字符串 合法值:public-read,private,public-read-write |
響應Header
名稱 | 描述 |
---|---|
x-oss-next-append-position | 指明下一次請求應當提供的position。實際上就是當前Object長度。當Append Object成功返回,或是因position和Object長度不匹配而引起的409錯誤時,會包含此header。 類型:64位整型 |
x-oss-hash-crc64ecma | 表明Object的64位CRC值。該64位CRC根據ECMA-182標準計算得出。 類型:64位整型 |
和其他操作的關係
- 不能對一個非Appendable Object進行Append Object操作。例如,已經存在一個同名Normal Object時,Append Object調用返回409,錯誤碼ObjectNotAppendable。
- 對一個已經存在的Appendable Object進行Put Object操作,那麼該Appendable Object會被新的Object覆蓋,類型變為Normal Object。
- Head Object操作會返回x-oss-object-type,用於表明Object的類型。對於Appendable Object來說,該值為Appendable。對Appendable Object,Head Object也會返回上述的x-oss-next-append-position和x-oss-hash-crc64ecma。
- Get Bucket(List Objects)請求的響應XML中,會把Appendable Object的Type設為Appendable
- 不能使用Copy Object來拷貝一個Appendable Object,也不能改變它的服務器端加密的屬性。可以使用Copy Object來改變用戶自定義元信息。
細節分析:
- URL參數append和position均為CanonicalizedResource,需要包含在簽名中。
- URL的參數必須包含append,用來指定這是一個Append Object操作。
- URL查詢參數還必須包含position,其值指定從何處進行追加。首次追加操作的position必須為0,後續追加操作的position是Object的當前長度。例如,第一次Append Object請求指定position值為0,content-length是65536;那麼,第二次Append Object需要指定position為65536。每次操作成功後,響應頭部x-oss-next-append-position也會標明下一次追加的position。
- 如果position的值和當前Object的長度不一致,OSS會返回409錯誤,錯誤碼為PositionNotEqualToLength。發生上述錯誤時,用戶可以通過響應頭部x-oss-next-append-position來得到下一次position,並再次進行請求。
- 當Position值為0時,如果沒有同名Appendable Object,或者同名Appendable Object長度為0,該請求成功;其他情況均視為Position和Object長度不匹配的情形。
- 當Position值為0,且沒有同名Object存在,那麼Append Object可以和Put Object請求一樣,設置諸如x-oss-server-side-encryption之類的請求Header。這一點和Initiate Multipart Upload是一樣的。如果在Position為0的請求時,加入了正確的x-oss-server-side-encryption頭,那麼後續的Append Object響應頭部也會包含x-oss-server-side-encryption頭,其值表明加密算法。後續如果需要更改meta,可以使用Copy Object請求。
- 由於並發的關係,即使用戶把position的值設為了x-oss-next-append-position,該請求依然可能因為PositionNotEqualToLength而失敗。
- Append Object產生的Object長度限製和Put Object一樣。
- 每次Append Object都會更新該Object的最後修改時間。
- 在position值正確的情況下,對已存在的Appendable Object追加一個長度為0的內容,該操作不會改變Object的狀態。
CRC64的計算方式
Appendable Object的CRC采用ECMA-182標準,和XZ的計算方式一樣。用Boost CRC模塊的方式來定義則有:
typedef boost::crc_optimal<64, 0x42F0E1EBA9EA3693ULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, true, true> boost_ecma;
uint64_t do_boost_crc(const char* buffer, int length)
{
boost_ecma crc;
crc.process_bytes(buffer, length);
return crc.checksum();
}
或是用Python crcmod的方式為:
do_crc64 = crcmod.mkCrcFun(0x142F0E1EBA9EA3693L, initCrc=0L, xorOut=0xffffffffffffffffL, rev=True)
print do_crc64(“123456789”)
示例
請求示例:
POST /oss.jpg?append&position=0 HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Cache-control: no-cache
Expires: Wed, 08 Jul 2015 16:57:01 GMT
Content-Encoding: utf-8
Content-Disposition: attachment;filename=oss_download.jpg
Date: Wed, 08 Jul 2015 06:57:01 GMT
Content-Type: image/jpg
Content-Length: 1717
Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:kZoYNv66bsmc10+dcGKw5x2PRrk=
[1717 bytes of object data]
返回示例:
HTTP/1.1 200 OK
Date: Wed, 08 Jul 2015 06:57:01 GMT
ETag: "0F7230CAA4BE94CCBDC99C5500000000"
Connection: keep-alive
Content-Length: 0
Server: AliyunOSS
x-oss-hash-crc64ecma: 14741617095266562575
x-oss-next-append-position: 1717
x-oss-request-id: 559CC9BDC755F95A64485981
最後更新:2016-11-23 17:16:08
上一篇:
GetObject__關於Object操作_API 參考_對象存儲 OSS-阿裏雲
下一篇:
DeleteObject__關於Object操作_API 參考_對象存儲 OSS-阿裏雲
推薦引擎服務協議__相關協議_平台介紹_數加平台介紹-阿裏雲
示例數據說明__大數據開發DataIDE_數加體驗館_數加平台介紹-阿裏雲
激活媒體工作流__媒體工作流接口_API使用手冊_視頻點播-阿裏雲
EnableKey__API 參考_密鑰管理服務-阿裏雲
平台概述__平台介紹_數加平台介紹-阿裏雲
第三方推流工具常見問題__常見問題_產品常見問題_視頻直播-阿裏雲
創建OceanBase實例__快速入門_雲數據庫 OceanBase-阿裏雲
步驟一: 實驗環境準備__快速入門_推薦引擎-阿裏雲
訪問控製RAM__用戶指南_雲服務器 ECS-阿裏雲
OceanBase SQL快速概覽__SQL語法參考_雲數據庫 OceanBase-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲