微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

aws c++ sdk s3 ListObjects 按最旧到最新的顺序

如何解决aws c++ sdk s3 ListObjects 按最旧到最新的顺序

使用 AWS SDK for C++ ListObjectsRequest,有没有办法让 SDK 根据 Set Marker 的值返回存储桶中的最新对象?在下面的代码中,问题在于 object_list 向量中的对象是最新到最旧的。因此,将“last_key”设置为“back()”元素的键会导致下一次循环中的结果为 0(因为没有比“last_key”更旧的东西。)

如果我将“last_key”设置为“front()”的键值,您最终会再次循环遍历相同的存储桶对象。

有没有办法使用“last_key”来告诉 SDK 获取比“last_key”更新的对象?

Aws::String last_marker;
while(true) {
  Aws::S3::Model::ListObjectsRequest objects_request;
  objects_request.WithBucket(bucket);
  if (last_key.length() > 0) {
     objects_request.SetMarker(last_key);
  }
  Aws::S3::Model::ListObjectsOutcome outcome;
  outcome = s_client.ListObjects(objects_request);
  Aws::Vector<Aws::S3::Model::Object> object_list = 
  outcome.GetResult().GetContents();
  //loop through object vector.
  last_marker.assign(object_list.back().GetKey());
}

解决方法

通常,您提供给 ListObjects 调用的标记是在您之前调用 ListObjects 的结果中返回给您的“下一个标记”。这是一个分页标记。不,它不支持“迟于”的概念,这是一个基于时间戳的概念,而标记与 S3 对象键相关,而不是时间戳。

另请注意:您应该使用 ListObjectsV2 而不是 ListObjects。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。