首页 > 解决方案 > AWS S3 SDK ListObjectsV2 startafter 和 ContinuationToken 有什么区别?

问题描述

Aws::S3::Model::ListObjectsV2Request用来列出 AWS s3 中的对象。

(它是 c++ sdk,但我想 Java 的实现是一样的,所以如果你熟悉 Java AWS S3 sdk,请也看看我的问题)

有超过 1000 个对象,因此根据 SDK 1000 记录限制,无法容纳在一页中。

我发现两个 API 似乎都可以合理地处理这个问题。1.

// pseudo code
list_req
all_res = []
while true {
    res = list_req.request()
    all_res.add(res.get_all_entries())
    if (res.isTruncated()) {
        list_req.set_continuation_token(res.get_continuation_token());
    }
}


2.

// pseudo code
list_req
all_res = []
while true {
    res = list_req.request()
    all_res.add(res.get_all_entries())
    if (res.isTruncated()) {
        list_req.set_start_after(res.get_last_entry());
    }
}

这两种方法有什么区别?(我的情况是第一种方法会出现异常The continuation token provided is incorrect with address : 52.218.217.49,所以我只能使用第二种方法。)

标签: amazon-web-servicesamazon-s3aws-sdk

解决方案


StartAfter (string) -- StartAfter 是您希望 Amazon S3 开始列出的位置。Amazon S3 在此指定键之后开始列出。StartAfter 可以是存储桶中的任何键。

ContinuationToken (string) -- ContinuationToken 指示 Amazon S3 正在使用令牌在此存储桶上继续该列表。ContinuationToken 被混淆并且不是真正的密钥。

因此,如果您想从以 开头的对象开始列出存储桶,请G使用StartAfter = 'G'.

ContinuationToken返回超过 1000 个结果时使用。在这种情况下,响应会提供一个ContinuationToken您必须传递给下一次调用的信息。结果将从最后一个列表完成的地方继续。

如果要从特定名称开始并检索超过 1000 个对象,您可以指定这两个参数。


推荐阅读