【问题标题】:AWS S3 SDK ListObjectsV2 what's difference between startafter and ContinuationToken?AWS S3 SDK ListObjectsV2 startafter 和 ContinuationToken 有什么区别?
【发布时间】:2020-10-20 14:26:26
【问题描述】:

我正在使用 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会出现异常,所以只能使用第二种方法。)

【问题讨论】:

  • 继续令牌与特定的客户端会话相关联,而 start after 可以被任何客户端使用并且永不过期。
  • 如果您可以提供#1 的实际代码,我们可以尝试重现您的情况。
  • 对于错误:The continuation token provided is incorrect,请参考forums.aws.amazon.com/thread.jspa?threadID=256859 延续标记,为Base64,通常包含“=、+或/”字符。如果身份验证代码包含加号 (+),请在请求中将其编码为 %2B。将正斜杠编码为 %2F 并等于 %3D

标签: amazon-web-services amazon-s3 aws-sdk


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 如果在请求中给出了maxKeys,那么当返回的结果超过maxKeys时使用ContinuationToken....默认maxKeys是1000
猜你喜欢
  • 2019-04-05
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多