2011-06-03 87 views
3

我正在構建一個Java應用程序作爲學習練習。目前,我想創建一個應用程序,它將把文件夾中的內容複製到我的Amazon S3存儲桶中。通過搜索,我發現了判斷2個文件是否相同的最好方法是獲取MD5值。如何將我的文件夾與Java中的Amazon S3同步

我該如何迭代獲取我的存儲桶中每個文件的MD5?

根據此鏈接: http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?ListingObjectKeysUsingJava.html

的ObjectListing類可以列出對象鍵,並在桶您的文件(元數據?)。但是,它並沒有真正指定我如何與文件進行交互。例如, 我的本地文件,我用番石榴和做這樣的事情:

MessageDigest md = MessageDigest.getInstance("MD5"); 
byte[] md4 = Files.getDigest(localFile, md); 

在AWS S3 API的時候,您可以使用S3Object.getObjectContent(),它會返回一個InputStream。這是直接在S3上處理對象的最佳方式嗎?

最後,什麼是從我的本地文件夾同步到S3中的桶的最佳方式?歡迎任何提示。

謝謝!

回答

2
ObjectListing objectListing = s3.listObjects(
    new ListObjectsRequest().withBucketName(bucket)); 
List<S3ObjectSummary> l = objectListing.getObjectSummaries(); 

S3ObjectSummary具有memeber稱爲eTag它是對象

+0

尼斯的MD5哈希值。謝謝!!!有趣的是,即使它是一個文件夾,我也可以使用eTag獲取MD5,但是當我嘗試在文件夾上執行Files.getDigest()時,會出現錯誤。這雖然運作良好!再次感謝! – okysabeni 2011-06-03 19:44:58

+0

亞馬遜S3沒有文件夾的概念。包含/的simpli文件名。所以,我真的不明白你是什麼意思_「即使它是一個文件夾」_ – 2011-06-03 20:36:50

+0

好吧,假設你有一個名爲file1.txt的S3文件,並且會有一個名爲/ folder1的「文件夾」。如果沒有文件夾的概念,這意味着這個文件包含其他文件,在我的腦海中是一個文件夾 – okysabeni 2011-06-06 17:08:17