如何使用 AWS C++ 开发工具包在给定的开始和结束日期范围内列出 S3 中的文件
How to list files in S3 within given start & end date range using AWS C++ SDK
我找不到任何方法或示例代码来列出在给定日期范围内创建的S3文件。我试过WithIfModifiedSince
、SetIfModifiedSince
和GetObjectRequest
。
#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 ?
我得到了解决方案:
- 使用ListObjectRequest((&列表对象((
- 逐1遍历所有文件
- 将文件名作为密钥传递给getobjectrequest((
- 使用WithIfModifiedSince((将开始日期传递给GetObjectRequest
- 使用WithIfUnmodifiedSince((将结束日期传递给GetObjectRequest
- 调用GetObject((
只有在给定日期时间范围内创建或修改了s3 bucket中的对象时,才会返回该对象。
但这并不是最有效的解决方案,因为我们为每个文件发送单独的GetObject((请求到aws3,这增加了对s3的请求。
请告诉我是否有更有效的方法可以在一个请求中获取给定日期时间范围内的所有文件。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 错误:未在此范围内声明'reverse'
- 并行用于C++17中数组索引范围内的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 不计算一个范围内的完美数
- 错误:"imread"未在此范围内声明
- 我在范围内未声明的错误类有问题
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- 我有一个数组,我想输入一个范围,然后找到范围内所有偶数的总和?
- 未在此范围内声明错误 'xy'
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 命名空间范围内的外部 - GCC vs clang vs msvc
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- 查找给定范围内最长连续 1 的频率
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- 如何使用 AWS C++ 开发工具包在给定的开始和结束日期范围内列出 S3 中的文件