【问题标题】:How do I sync my folder to Amazon S3 in Java如何在 Java 中将我的文件夹同步到 Amazon S3
【发布时间】:2011-06-04 03:26:39
【问题描述】:

我正在构建一个 java 应用程序作为学习练习。现在,我想制作一个应用程序,它将获取文件夹中的内容并将其复制到我的 Amazon S3 存储桶中。通过搜索,我发现判断 2 个文件是否相同的最佳方法是获取 MD5 值。

如何迭代地获取存储桶中每个文件的 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 中的存储桶的最佳方式是什么?欢迎任何提示。

谢谢!!!!

【问题讨论】:

    标签: java amazon-s3


    【解决方案1】:
    ObjectListing objectListing = s3.listObjects(
      new ListObjectsRequest().withBucketName(bucket));
    List<S3ObjectSummary> l = objectListing.getObjectSummaries();
    

    S3ObjectSummary 有一个名为 eTag 的成员,它是对象的 md5 哈希

    【讨论】:

    • 不错。谢谢!!!有趣的是,即使它是一个文件夹,我也可以使用 eTag 获取 MD5,但是当我尝试在文件夹上执行 Files.getDigest() 时它会给我错误。不过这很好用!再次感谢!
    • amazon s3 上没有文件夹的概念。包含 / 的简单文件名。所以,我真的不明白你所说的“即使它是一个文件夹”是什么意思
    • 好吧,假设您在 S3 中有一个名为 file1.txt 的文件,并且会有一个名为 /folder1 的“文件夹”。如果没有文件夹的概念,这意味着这个文件包含一个其他文件,在我看来是一个文件夹
    • @Yko,不是真的,您的 file1.txt 实际上不是称为 file1.txt 而是文件夹/file1.txt。证明是你不能只列出***“当前文件夹”中的文件,但你可以按前缀列出文件,如果你的前缀是folder/,那么你会得到folder/a.txt和folder/dir/b.txt
    猜你喜欢
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2015-02-02
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多