2017-02-28 120 views
0

我想將對象上傳到Amazon版本化存儲桶(使用Java AWS SDK),併爲此對象設置自定義版本(目標是爲所有對象設置相同的版本,上傳在一次)使用自定義版本號將對象上傳到Amazon S3

PutObjectResult por = amazonS3Client.putObject(...); 
por.setVersionId("custom_version"); 

那麼,是不是設置一個版本上傳對象的正確方法?

此代碼是否會導致2個獨立的請求到亞馬遜?

如果在調用por.setVersionId(..)時互聯網被破壞會怎麼樣?

爲什麼por.setVersionId(..)不會拋出異常(如SdkClientException),如果此方法真的試圖在Amazon服務器上設置版本ID?

回答

3

setVersionId是SDK庫本身用來填充創建對象時由服務返回的versionId的東西,這樣如果您想知道它是什麼,就可以檢索它。

S3中的版本ID是系統生成的不透明字符串,用於唯一標識對象的特定版本。你不能分配它們。

documentation使用了一些不幸的例子,如「111111」和「222222」,它們不像真正的版本ID。有一個更好的例子進一步下跌的頁面,在那裏你會發現這一點:

唯一的版本ID是隨機生成的,Unicode的,UTF-8編碼,URL就緒,不透明的字符串至多1024個字節長。示例版本ID是3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo.

只有Amazon S3生成版本ID。

它們不能被編輯。

您不會在這裏收到錯誤,因爲所有此方法都會在上傳完成後在本地內存中的PutObjectResult對象內設置versionId。它成功了,但沒有任何用處。

要將用戶定義的元數據與對象(如發佈/版本ID)一起存儲,您需要在S3中使用對象元數據(x-amz-meta-*)或新對象標記功能。