華為云計算 云知識 PUT上傳對象PutObject
PUT上傳對象PutObject

 

接口說明

用戶在OBS系統(tǒng)中創(chuàng)建了桶之后,可以采用PUT操作的方式將對象上傳到桶中。上傳對象操作是指在指定的桶內(nèi)增加一個對象,執(zhí)行該操作需要用戶擁有桶的寫權(quán)限。 說明: 同一個桶中存儲的對象名是唯一的。 在桶未開啟多版本的情況下,如果在指定的桶內(nèi)已經(jīng)有相同的對象鍵值的對象,用戶上傳的新對象會覆蓋原來的對象;為了確保數(shù)據(jù)在傳輸過程中沒有遭到破壞,用戶可以在請求消息頭中加入Content-MD5參數(shù)。在這種情況下,OBS收到上傳的對象后,會對對象進行MD5校驗,如果不一致則返回出錯信息。 用戶還可以在上傳對象時指定x-obs-acl參數(shù),設(shè)置對象的權(quán)限控制策略。如果匿名用戶在上傳對象時未指定x-obs-acl參數(shù),則該對象默認可以被所有OBS用戶訪問。 該操作支持服務(wù)端加密功能。 單次上傳對象大小范圍是[0, 5GB],如果需要上傳超過5GB的大文件,需要通過多段操作來分段上傳。 OBS沒有文件夾的概念。為了使用戶更方便進行管理數(shù)據(jù),OBS提供了一種方式模擬文件夾:通過在對象的名稱中增加“/”,例如“test/123.jpg”。此時,“test”就被模擬成了一個文件夾,“123.jpg”則模擬成“test”文件夾下的文件名了,而實際上,對象名稱(Key)仍然是“test/123.jpg”。此類命名方式的對象,在控制臺上會以文件夾的形式展示。

與POST上傳的區(qū)別 #### PUT上傳中參數(shù)通過請求頭域傳遞;POST上傳則作為消息體中的表單域傳遞。

PUT上傳需在URL中指定對象名;POST上傳提交的URL為桶域名,無需指定對象名。兩者的請求行分別為: PUT /ObjectName HTTP/1.1 POST / HTTP/1.1 關(guān)于POST上傳的更多詳細信息,請參考POST上傳。

多版本 #### 如果桶的多版本狀態(tài)是開啟的,系統(tǒng)會自動為對象生成一個唯一的版本號,并且會在響應(yīng)報頭x-obs-version-id返回該版本號。如果桶的多版本狀態(tài)是暫停的,則對象的版本號為null。關(guān)于桶的多版本狀態(tài),參見設(shè)置桶的多版本狀態(tài)。

URL
PUT  https://obs.cn-north-4.myhuaweicloud.com/{object_key} 
請求參數(shù)
名稱 類型 IN 必選 描述
Authorization
 
string header

請求消息中可帶的簽名信息。

Date
 
string header

請求發(fā)起端的日期和時間,例如:Wed, 27 Jun 2018 13:39:15 +0000。 默認值:無。 條件:如果消息頭中帶了x-obs-date字段,則可以不帶該字段,其他情況下必選。

Content-MD5
 
string header

按照RFC 1864標準計算出消息體的MD5摘要字符串,即消息體128-bit MD5值經(jīng)過base64編碼后得到的字符串

示例:n58IG6hfM7vqI4K0vnWpog==。

x-obs-acl
 
string header

創(chuàng)建對象時,可以加上此消息頭設(shè)置對象的權(quán)限控制策略,使用的策略為預(yù)定義的常用策

示例:x-obs-acl: public-read。

x-obs-grant-read
 
string header

創(chuàng)建對象時,使用此頭域授權(quán)租戶下所有用戶有讀對象和獲取對象元數(shù)據(jù)的權(quán)限

示例:x-obs-grant-read: id=domainID。如果授權(quán)給多個租戶,需要通過','分割。

x-obs-grant-read-acp
 
string header

創(chuàng)建對象時,使用此頭域授權(quán)租戶下所有用戶有獲取對象ACL的權(quán)限

示例:x-obs-grant-read-acp: id=domainID。如果授權(quán)給多個租戶,需要通過','分割。

x-obs-grant-write-acp
 
string header

創(chuàng)建對象時,使用此頭域授權(quán)租戶下所有用戶有寫對象ACL的權(quán)

示例:x-obs-grant-write-acp: id=domainID。如果授權(quán)給多個租戶,需要通過','分割。

x-obs-grant-full-control
 
string header

創(chuàng)建對象時,使用此頭域授權(quán)domain下所有用戶有讀對象、獲取對象元數(shù)據(jù)、獲取對象ACL、寫對象ACL的權(quán)限

示例:x-obs-grant-full-control: id=domainID。如果授權(quán)給多個租戶,需要通過','分割。

x-obs-storage-class
 
string header

創(chuàng)建對象時,可以加上此頭域設(shè)置對象的存儲類型。如果未設(shè)置此頭域,則以桶的默認存儲類型作為對象的存儲類型

說明:存儲類型有3種:STANDARD(標準存儲)、WARM(低頻訪問存儲)、COLD(歸檔存儲)。因此這里可配置的值有:STANDARD、WARM和COLD,注意大小寫敏感。

示例:x-obs-storage-class: STANDARD

x-obs-meta-xxx
 
string header

用戶自定義元數(shù)據(jù)

示例:x-obs-meta-test: test metadata

x-obs-persistent-headers
 
string header

創(chuàng)建對象時,可以在HTTP請求中加入“x-obs-persistent-headers”消息頭,用來加入一個或多個自定義的響應(yīng)頭,當用戶獲取此對象或查詢此對象元數(shù)據(jù)時,加入的自定義響應(yīng)頭將會在返回消息的頭域中出現(xiàn)。 格式:x-obs-persistent-headers: key1:base64_encode(value1),key2:base64_encode(value2)....

說明:其中key1/key2等為自定義header,若含有非ASCII碼或不可識別字符,可以采用URL編碼或者Base64編碼,服務(wù)端只會作為字符串處理,不會做解碼。value1/value2等為對應(yīng)自定義header的值,base64_encode指做base64編碼,即將自定義header和對應(yīng)值的base64編碼作為一個key-value對用“:”連接,然后用“,”將所有的key-value對連接起來,放在x-obs-persistent-headers這個header中即可,服務(wù)端會對上傳的value做解碼處理。

示例: x-obs-persistent-headers: key1:dmFsdWUx,key2:dmFsdWUy

下載此對象或獲取此對象元數(shù)據(jù)時:返回兩個頭域分別為“key1:value1”與“key2:value2”

約束:

  1. 通過該方式指定的自定義響應(yīng)頭不能以“x-obs-”為前綴,比如可以指定“key1”,但是不能指定“x-obs-key1”

  2. 不能指定http標準頭,例如host/content-md5/origin/range/Content-Disposition等

  3. 此頭域和自定義元數(shù)據(jù)總長度不能超過8KB

  4. 如果傳入相同key,將value以“,”拼接后放入同一個key中返回

x-obs-website-redirect-location
 
string header

當桶設(shè)置了Website配置,可以將獲取這個對象的請求重定向到桶內(nèi)另一個對象或一個外部的URL,OBS將這個值從頭域中取出,保存在對象的元數(shù)據(jù)中。

例如,重定向請求到桶內(nèi)另一對象:

x-obs-website-redirect-location:/anotherPage.html

或重定向請求到一個外部URL:

x-obs-website-redirect-location:http://www.example.com/

默認值:無

約束:必須以“/”、“http://”或“https://”開頭,長度不超過2KB。

x-obs-server-side-encryption
 
string header

使用該頭域表示服務(wù)端加密是SSE-KMS方式。

示例:x-obs-server-side-encryption: kms

x-obs-server-side-encryption-kms-key-id
 
string header

SSE-KMS方式下使用該頭域,該頭域表示主密鑰,如果用戶沒有提供該頭域,那么默認的主密鑰將會被使用。 支持兩種格式的描述方式:

  1. regionID:domainID(租戶ID):key/key_id

或者

2.key_id

其中regionID是使用密鑰所屬region的ID;domainID是使用密鑰所屬租戶的租戶ID;key_id是從 數(shù)據(jù)加密 服務(wù)創(chuàng)建的密鑰ID。

示例:

  1. x-obs-server-side-encryption-kms-key-id: cn-north-4:domainiddomainiddomainiddoma0001:key/4f1cd4de-ab64-4807-920a-47fc42e7f0d0 或者

  2. x-obs-server-side-encryption-kms-key-id: 4f1cd4de-ab64-4807-920a-47fc42e7f0d0

x-obs-server-side-encryption-customer-algorithm
 
string header

SSE-C方式下使用該頭域,該頭域表示加密使用的算法。

示例:x-obs-server-side-encryption-customer-algorithm: AES256

約束:需要和x-obs-server-side-encryption-customer-key, x-obs-server-side-encryption-customer-key-MD5一起使用。

x-obs-server-side-encryption-customer-key
 
string header

SSE-C方式下使用該頭域,該頭域表示加密使用的密鑰。該密鑰用于加密對象

示例:x-obs-server-side-encryption-customer-key:K7QkYpBkM5+hca27fsNkUnNVaobncnLht/rCB2o/9Cw=

約束:該頭域由256-bit的密鑰經(jīng)過base64-encoded得到,需要和x-obs-server-side-encryption-customer-algorithm,x-obs-server-side-encryption-customer-key-MD5一起使用。

x-obs-server-side-encryption-customer-key-MD5
 
string header

SSE-C方式下使用該頭域,該頭域表示加密使用的密鑰的MD5值。MD5值用于驗證密鑰傳輸過程中沒有出錯。

示例:x-obs-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ==

約束: 該頭域由密鑰的128-bit MD5值經(jīng)過base64-encoded得到,需要和x-obs-server-side-encryption-customer-algorithm,x-obs-server-side-encryption-customer-key一起使用。

success-action-redirect
 
string header

此參數(shù)的值是一個URL,用于指定當此次請求操作成功響應(yīng)后的重定向的地址。

如果此參數(shù)值有效且操作成功,響應(yīng)碼為303,Location頭域由此參數(shù)以及桶名、對象名、對象的ETag組成。 如果此參數(shù)值無效,則OBS忽略此參數(shù)的作用,響應(yīng)碼為204,Location頭域為對象地址。

x-obs-expires
 
integer header

表示對象的過期時間,單位是天。過期之后對象會被自動刪除。(從對象最后修改時間開始計算) 此字段對于每個對象僅支持上傳時配置,不支持后期通過修改元數(shù)據(jù)接口修改。

示例:x-obs-expires:3

object_key
 
string path

通過此請求創(chuàng)建的對象名稱。

bucket_name
 
string query

桶名稱

Body參數(shù)
名稱 類型 必選 描述
 
file  
返回參數(shù)
返回碼: 200

成功響應(yīng)消息。

名稱 類型 必選 描述
Content-Length
 
string

響應(yīng)消息體的字節(jié)長度。

Connection
 
string

指明與服務(wù)器的連接是長連接還是短連接。

Date
 
string

OBS系統(tǒng)響應(yīng)的時間。

ETag
 
string

對象的base64編碼的128位MD5摘要。ETag是對象內(nèi)容的唯一標識,可以通過該值識別對象內(nèi)容是否有變化。比如上傳對象時ETag為A,下載對象時ETag為B,則說明對象內(nèi)容發(fā)生了變化。實際的ETag是對象的哈希值。ETag只反映變化的內(nèi)容,而不是其元數(shù)據(jù)。上傳的對象或拷貝操作創(chuàng)建的對象,通過MD5加密后都有唯一的ETag。如果通過多段上傳對象,則無論加密方法如何,MD5會拆分ETag,此類情況ETag就不是MD5的摘要。

x-obs-id-2
 
string

幫助定位問題的特殊符號。

x-obs-request-id
 
string

由OBS創(chuàng)建來唯一確定本次請求的值,可以通過該值來定位問題。

x-obs-version-id
 
string

對象的版本號。如果桶的多版本狀態(tài)為開啟,則會返回對象的版本號。

x-obs-server-side-encryption
 
string

如果服務(wù)端加密是SSE-KMS方式,響應(yīng)包含該頭域。

x-obs-server-side-encryption-kms-key-id
 
string

如果服務(wù)端加密是SSE-KMS方式,響應(yīng)包含該頭域,該頭域表示主密鑰。

格式為: regionID:domainID(租戶ID):key/key_id

其中regionID是使用密鑰所屬region的ID;domainID是使用密鑰所屬租戶的租戶ID;key_id是本次加密使用的密鑰ID。

x-obs-server-side-encryption-customer-algorithm
 
string

如果服務(wù)端加密是SSE-C方式,響應(yīng)包含該頭域,該頭域表示加密使用的算法。

x-obs-server-side-encryption-customer-key-MD5
 
string

如果服務(wù)端加密是SSE-C方式,響應(yīng)包含該頭域,該頭域表示加密使用的密鑰的MD5值。

x-obs-storage-class
 
string

對象為非標準存儲對象時,會返回此頭域,可取值為:WARM或者COLD

返回碼: 400

請求失敗響應(yīng)消息。

名稱 類型 必選 描述
Code
 
string

錯誤響應(yīng)消息體XML中錯誤響應(yīng)對應(yīng)的HTTP消息返回碼,具體的錯誤碼請參見錯誤碼-表2

Message
 
string

錯誤響應(yīng)消息體XML中具體錯誤更全面、詳細的英文解釋,具體的錯誤消息請參見錯誤碼-表2。

RequestId
 
string

本次錯誤請求的請求ID,用于錯誤定位。

HostId
 
string

返回該消息的服務(wù)端ID。

Resource
 
string

該錯誤相關(guān)的桶或?qū)ο筚Y源。

請求示例
示例 1

上傳對象

 
"PUT /object01 HTTP/1.1"
 
"PUT /object01 HTTP/1.1\nUser-Agent: curl/7.29.0\nHost: examplebucket.obs.cn-north-4.myhuaweicloud.com\nAccept: */*\nDate: WED, 01 Jul 2015 04:11:15 GMT\nAuthorization: OBS H4IPJX0TQTHTHEBQQCEC:gYqplLq30dEX7GMi2qFWyjdFsyw=\nContent-Length: 10240\nExpect: 100-continue\n\n[1024 Byte data content]\n"
示例 2

上傳對象的同時設(shè)置ACL

 
"PUT /object01 HTTP/1.1"
 
"PUT /object01 HTTP/1.1\nUser-Agent: curl/7.29.0\nHost: examplebucket.obs.cn-north-4.myhuaweicloud.com\nAccept: */*\nDate: WED, 01 Jul 2015 04:13:55 GMT\nx-obs-grant-read:id=52f24s3593as5730ea4f722483579ai7,id=a93fcas852f24s3596ea8366794f7224\nAuthorization: OBS H4IPJX0TQTHTHEBQQCEC:gYqplLq30dEX7GMi2qFWyjdFsyw=\nContent-Length: 10240\nExpect: 100-continue\n\n[1024 Byte data content]\n"
示例 3

桶開啟多版本時上傳對象

 
"PUT /object01 HTTP/1.1"
 
"PUT /object01 HTTP/1.1\nUser-Agent: curl/7.29.0\nHost: examplebucket.obs.cn-north-4.myhuaweicloud.com\nAccept: */*\nDate: WED, 01 Jul 2015 04:17:12 GMT\nx-obs-storage-class: WARM\nAuthorization: OBS H4IPJX0TQTHTHEBQQCEC:uFVJhp/dJqj/CJIVLrSZ0gpw3ng=\nContent-Length: 10240\nExpect: 100-continue\n\n[1024 Byte data content]\n"
示例 4

上傳對象時攜帶MD5

 
"PUT /object01 HTTP/1.1"
 
"PUT /object01 HTTP/1.1\nUser-Agent: curl/7.29.0\nHost: examplebucket.obs.cn-north-4.myhuaweicloud.com\nAccept: */*\nDate: WED, 01 Jul 2015 04:17:50 GMT\nAuthorization: OBS H4IPJX0TQTHTHEBQQCEC:uFVJhp/dJqj/CJIVLrSZ0gpw3ng=\nContent-Length: 10\nContent-MD5: 6Afx/PgtEy+bsBjKZzihnw==\nExpect: 100-continue\n\n1234567890\n"
示例 5

桶設(shè)置了Website配置,上傳對象時設(shè)置下載對象時重定向

 
"PUT /object01 HTTP/1.1"
 
"PUT /object01 HTTP/1.1\nUser-Agent: curl/7.29.0\nHost: examplebucket.obs.cn-north-4.myhuaweicloud.com\nAccept: */*\nDate: WED, 01 Jul 2015 04:17:12 GMT\nx-obs-website-redirect-location: http://www.example.com/\nAuthorization: OBS H4IPJX0TQTHTHEBQQCEC:uFVJhp/dJqj/CJIVLrSZ0gpw3ng=\nContent-Length: 10240\nExpect: 100-continue\n\n[1024 Byte data content]\n"
示例 6

在URL中攜帶簽名并上傳對象

 
"PUT /object02?AccessKeyId=H4IPJX0TQTHTHEBQQCEC&Expires=1532688887&Signature=EQmDuOhaLUrzrzRNZxwS72CXeXM%3D HTTP/1.1"
 
"PUT /object02?AccessKeyId=H4IPJX0TQTHTHEBQQCEC&Expires=1532688887&Signature=EQmDuOhaLUrzrzRNZxwS72CXeXM%3D HTTP/1.1\nUser-Agent: curl/7.29.0\nHost: examplebucket.obs.cn-north-4.myhuaweicloud.com\nAccept: */*\nContent-Length: 1024\n\n[1024 Byte data content]\n"
示例 7

上傳指定存儲類型的對象

 
"PUT /object01 HTTP/1.1"
 
"PUT /object01 HTTP/1.1\nUser-Agent: curl/7.29.0\nHost: examplebucket.obs.cn-north-4.myhuaweicloud.com\nAccept: */*\nDate: WED, 01 Jul 2015 04:15:07 GMT\nx-obs-storage-class: WARM\nAuthorization: OBS H4IPJX0TQTHTHEBQQCEC:uFVJhp/dJqj/CJIVLrSZ0gpw3ng=\nContent-Length: 10240\nExpect: 100-continue\n\n[1024 Byte data content]\n"
錯誤碼
請參考 錯誤碼說明。