我得到了本地文件的 MD5,但它与 Amazon S3 中“相同”文件的 MD5 (eTag) 不同。我想要实现的是弄清楚我在 S3 中拥有的最新文件是否与我在本地拥有的文件相同。如果我不能比较MD5,那我该怎么办?
从本地文件生成MD5(截断代码):
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5 = Files.getDigest(localFile, md);
String hashtext = DigestUtils.md5Hex(md5);
从 S3(截断代码)中检索 MD5 (eTag):
ObjectListing objectListing = s3.listObjects(new ListObjectsRequest().withBucketName(bucketName));
List<S3ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
for(S3ObjectSummary objectSummary : objectSummaries) {
String MD5 = objectSummary.getETag();
}
PS:我使用 org.apache.commons.codec.digest.DigestUtils
和 com.google.common.io.Files
库。
最佳答案
String hashtext = DigestUtils.md5Hex(md5);
计算你刚刚计算的 MD5 的 MD5。参见 DigestUtils.md5Hex documentation .
hashtext
实际上是 MD5(MD5(file)) 而不是 MD5(file)。
关于java - 来自本地文件的 MD5 和来自 S3 的 MD5 (eTag) 不相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6256434/