如何比较本地文件与Amazon s3文件
我正在研究桌面Java应用程序。 它需要检查我的S3服务器上的特定文件。
我不想下载整个文件进行比较,我需要找出服务器中的那个是否比本地更新,然后下载并替换。
我不确定如何检查是否有更新的可用部分。
我听说哈希作为一种方法,但我对如何在两个方面(本地和通过S3)实际执行此操作几乎没有经验
获取远程文件的哈希: 如何在Amazon S3上获取文件的md5sum
获取本地文件的哈希: 使用Java获取文件的MD5校验和
以编程方式比较大小<5 GB的文件的E-Tag。
计算本地文件的哈希值:
String hash = DigestUtils.md5Hex(new FileInputStream(path));
获取S3对象的Etag : 获取S3对象的Etag @dnault已经提到过
如果您按照上面的说明计算哈希值,那么对于文件大小小于5 GB的所有情况,它应该相同。
如果文件大小大于5 GB: 多部分MD5
如果您也是最初在S3上创建文件的人,则可以在第一次putObject()
时使用MD5(例如meta.setUserMetadata(mymap)
)存储自定义ObjectMetadata
,然后使用s3.getObjectMetadata()
查找。