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

时间:2021-07-20 16:30:50

标签: c++ amazon-web-services aws-sdk aws-sdk-cpp

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

1 个答案:

答案 0 :(得分:1)

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

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

相关问题