如何使用 AWS C++ 开发工具包在给定的开始和结束日期范围内列出 S3 中的文件

How to list files in S3 within given start & end date range using AWS C++ SDK

本文关键字:范围内 日期 结束 文件 S3 开始 开发 C++ AWS 开发工具 工具包      更新时间:2023-10-16

我找不到任何方法或示例代码来列出在给定日期范围内创建的S3文件。我试过WithIfModifiedSinceSetIfModifiedSinceGetObjectRequest

#include <aws/core/Aws.h>
#include <aws/s3/S3Client.h>
#include <aws/s3/model/ListObjectsRequest.h>
#include <aws/s3/model/Object.h>
/* list_files_s3_create_withen_given_date_range */
{
Aws::S3::S3Client s3_client;
Aws::S3::Model::ListObjectsRequest objects_request;
objects_request.WithBucket(bucket_name);
/* This lists all the files in s3 bucket. */
/* But how to get files within a given date range. */
//Aws::S3::Model::GetObjectRequest object_request;
//object_request.SetBucket(bucket_name);
//object_request.WithIfModifiedSince(DateTime)
auto list_objects_outcome = s3_client.ListObjects(objects_request);
if (list_objects_outcome.IsSuccess())
{
Aws::Vector<Aws::S3::Model::Object> object_list =
list_objects_outcome.GetResult().GetContents();
for (auto const &s3_object : object_list)
{
std::cout << "* " << s3_object.GetKey() << std::endl;
}
}
}    

//------------------------------------

Aws::Utils::DateTime startdt = Aws::Utils::DateTime::DateTime("2019-10-23T10:00:00Z", Aws::Utils::DateFormat::ISO_8601); 
Aws::Utils::DateTime enddt = Aws::Utils::DateTime::Now(); Aws::S3::Model::GetObjectRequest object_request; object_request.SetBucket(bucket_name); object_request.WithIfModifiedSince(startdt); 
//object_request.SetIfModifiedSince(startdt); 
auto object_outcome = s3_client.GetObject(objects_request);
if (object_outcome.IsSuccess())
{
std::cout << object_outcome.GetResultWithOwnership().GetETag() << std::endl;
}

The code is not returning any object(file) from s3 bucket why ?

我得到了解决方案:

  1. 使用ListObjectRequest((&列表对象((
  2. 逐1遍历所有文件
    • 将文件名作为密钥传递给getobjectrequest((
    • 使用WithIfModifiedSince((将开始日期传递给GetObjectRequest
    • 使用WithIfUnmodifiedSince((将结束日期传递给GetObjectRequest
    • 调用GetObject((

只有在给定日期时间范围内创建或修改了s3 bucket中的对象时,才会返回该对象。

但这并不是最有效的解决方案,因为我们为每个文件发送单独的GetObject((请求到aws3,这增加了对s3的请求。

请告诉我是否有更有效的方法可以在一个请求中获取给定日期时间范围内的所有文件。