[英]Amazon S3 file availability after upload
我想在測試用例期間上傳文件,然后立即下載以驗證文件是否已上傳。 我使用的鍵已經上升到S3了。
當我的上傳完成后,我會進行下載,但不知何故,我得到了此文件的先前版本。
我的代碼看起來像這樣:
final ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentType(binaryDataReference.getContentType()); objectMetadata.setContentLength(data.length); objectMetadata.setContentEncoding(xmlEncoding.getCharset()); s3Client.putObject(BUCKET_NAME, key, new ByteArrayInputStream(data), objectMetadata); Thread.sleep(30000); // this I've done because I thought its a timing issue. S3Object object = s3Client.getObject(BUCKET_NAME, binaryDataKey);
但我得到的對象不是我剛剛上傳的對象。
我是否需要做一些事情,或者是否有人知道這種方法的缺點是什么?
這就是S3的工作方式 :
美國標准區域中的Amazon S3存儲桶提供最終一致性 。 所有其他區域中的Amazon S3存儲桶為新對象的PUTS提供讀寫后一致性,並為覆蓋PUTS和DELETES提供最終一致性。
這意味着在寫完新對象后,只要它不在美國標准區域,您就可以立即讀取它。 否則 - 即如果您在美國標准區域或者您正在覆蓋或刪除現有對象 - 您只能保證“最終”您的操作結果將可見。
我曾經問過亞馬遜是否在覆蓋了一個對象並成功讀回最新版本后,是否保證同一連接上的所有后續讀取都返回最新版本。 也就是說,如果我編寫版本2並閱讀版本2,我是否再也不會閱讀版本1? 他們沒有回應。
如果您確實需要更強的一致性,那么Google雲端存儲提供了更新后讀取和刪除后讀取的一致性 ,盡管GCS在上次檢查時比S3稍貴一些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.