AWS S3 SDK ListObjectsV2 startafter 和 ContinuationToken 有什么区别?

Ziq*_*Liu 3 amazon-s3 amazon-web-services aws-sdk

我正在使用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());
    }
}


Run Code Online (Sandbox Code Playgroud)

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*ein 6

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

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

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

ContinuationToken当返回了超过1000个结果被使用。在这种情况下,响应提供ContinuationToken您必须传递到下一个调用的 。结果将从上次列表结束的地方继续。

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