【问题标题】:AWS S3 Java SDK - ListVersionsRequest Get Only Latest VersionsAWS S3 Java SDK - ListVersionsRequest 仅获取最新版本
【发布时间】:2019-05-13 21:51:27
【问题描述】:

有没有办法指定在ListVersionsRequest 中只包含每个对象的最新版本?我需要版本值,所以一个简单的AmazonS3Client.listObjects(...) 是不够的,因为S3ObjectSummary 没有版本信息。

我正在创建一个实用程序,它为版本化存储桶中的所有对象 ping S3,并将最新版本值与实用程序已经跟踪的值进行比较。我现在能想到的唯一解决方案就是做AmazonS3Client.listVersions(...),遍历S3VersionSummary 列表,处理第一个最新版本,然后手动迭代并跳过所有旧版本的对象,直到它到达新键。这是最好的解决方案吗?

谢谢

【问题讨论】:

    标签: java amazon-s3 aws-java-sdk


    【解决方案1】:

    我只看到两个选项:

    1. 按照您的描述执行并列出您拥有的所有数据版本。之后,您将获得一个按版本控制顺序排列的列表,因此您需要知道何时停止检查版本。我认为这可以通过遍历版本列表并在第一个返回 false ref

    2. 的 islatest() 调用处停止来完成
    3. 您可以列出对象,然后获取包含版本 ID 的每个对象的对象摘要。

    【讨论】:

    • 1.我喜欢 isLatest() 方法,我自己没有看到,它比手动检查下一个键时的代码更干净,而不仅仅是同一个键的旧版本。 2. S3ObjectSummary 对象没有关于版本的信息,所以我不认为 listObjects(..) 是一个可行的选择。使用它,我需要为存储桶中的每个执行 getObject(..) 以从元数据中获取版本。
    • 我所说的“然后获取每个对象的对象摘要”的意思是您可以获取列表,然后为列表中的每个项目调用 getObjectMetadata ,其中将包含 versionID 而无需获取对象本身。无论哪种方式,如果确实以这种方式返回版本列表,第一个解决方案会更好。
    【解决方案2】:

    从 ListVersions 的链接中指定的 ListVersionsRequest 的返回表明以下...

    版本从最近到最近排序。

    因此,询问特定 s3 密钥的版本,列表中的第一个结果是最新版本。

    【讨论】:

    • 正确,但这不适合我的用例,因为我不想要一个特定的 S3 密钥,我想要给定存储桶中的所有对象。
    【解决方案3】:

    处理第一个最新版本,然后手动迭代并跳过对象的所有旧版本,直到它获得新密钥

    您可以简单地使用isLatest(),而不是这样做,在S3VersionSummary 中可用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 2021-08-27
      • 2020-01-14
      相关资源
      最近更新 更多