【发布时间】:2017-11-22 22:27:55
【问题描述】:
我列出了 s3 上特定密钥的所有可用版本。两个问题:
- 我获得的前 1000 个版本 ID 不是有效的“NoSuchVersion”。其余版本 ID 工作正常。
- 一旦我环回,IsTruncated 标志就永远不会变回 false。
问题 #2 对我来说没什么大不了的。但 #1 是一个表演者。
这是一个代码sn-p:
Model::ListObjectVersionsRequest object_request;
object_request.WithBucket(this->bucket_name);
object_request.WithKeyMarker( ... + ".json");
do {
auto list_versions_outcome = this->s3_client->ListObjectVersions(object_request);
//...
//prepare for next iteration
object_request.SetVersionIdMarker(list_versions_outcome.GetResult().GetNextVersionIdMarker());
} while (keep_looking);
想法?
【问题讨论】:
-
我不明白
object_request.WithKeyMarker( ... + ".json");另外,您不需要同时设置 versionid 和 next 键标记以正确迭代吗?我认为您假设 ListObjectVersions 始终返回您要求的确切密钥的版本,而这可能不是正在发生的事情——检查每个元素的密钥,而不仅仅是 versionid。告诉我们您的发现。 -
嗨迈克尔,感谢您的评论。 .WithKeyMarker(... + ".json") 行是指定我希望列出所有版本的密钥。我正在尝试列出该存储桶中仅一个密钥的所有版本。由于那个键没有改变,我不需要每次迭代都重新设置它。
-
你做了一些假设,并没有完全按照预期使用它。您需要查看响应的每个元素为您提供的键,因为它可能不是您所期望的。如果要列出一个特定键的版本,请将其设置为前缀,而不是第一个请求的键标记。然后在每个后续请求上设置密钥和版本标记,即使看起来没有必要。标记用于继续。它们可以在第一个请求中使用,但结果可能与您的期望不符。您还应该将分隔符设置为
/以避免歧义。
标签: amazon-web-services amazon-s3 aws-sdk-cpp