![](/img/trans.png)
[英]What is the expected behavior for ListObjects in GCP with a non existent path? (C++)
[英]How to access AWS "subfolders" using ListObjects() in C++ SDK?
我正在尝试列出“noaa-goes16/GLM-L2-LCFA/2021/140/05”存储桶中的对象。 AWS C++ SDK 表示,为了列出对象,您需要使用以下函数:
bool ListObjects(const Aws::String& bucketName,
const Aws::Client::ClientConfiguration& clientConfig) {
Aws::S3::S3Client s3_client(clientConfig);
Aws::S3::Model::ListObjectsRequest request;
request.WithBucket(bucketName);
auto outcome = s3_client.ListObjects(request);
if (!outcome.IsSuccess()) {
std::cerr << "Error: ListObjects: " <<
outcome.GetError().GetMessage() << std::endl;
}
else {
Aws::Vector<Aws::S3::Model::Object> objects =
outcome.GetResult().GetContents();
for (Aws::S3::Model::Object& object : objects) {
std::cout << object.GetKey() << std::endl;
}
}
return outcome.IsSuccess();
}
将字符串传递给函数后,出现以下错误:
Aws::SDKOptions options;
Aws::InitAPI(options);
Aws::Client::ClientConfiguration clientConfig;
std::string object = "noaa-goes16/GLM-L2-LCFA/2021/140/05";
ListObject(object, clientConfig);
输出:
Error: ListObjects: The specified key does not exist.
noaa-goes16/GLM-L2-LCFA/2021/140/05
我试图在存储桶名称中添加一个“/”,它再次声明它不存在。 如果我只是尝试将“noaa-goes16”作为存储桶名称,它会列出 1000 个与我的应用程序无关的文件。 如何使用 AWS C++ 开发工具包列出“/05”子文件夹中的文件?
我尝试使用 AWS C++ SDK 中的 ListObjects() 函数列出 noaa-goes16 存储桶子文件夹中的文件。 我收到一条错误消息,指出我要求的子文件夹不存在。 但是,我知道我要求的子文件夹确实存在。 我试图在桶的末尾添加一个“/”,认为这样可以解决错误。 这没有帮助。 我发现如果我只将主存储桶对象作为名称(“noaa-goes16”),它就可以工作。 但是,我无法列出特定子文件夹中的对象,我想知道如何操作。
一切,我刚刚想通了。 希望这个线程可以帮助其他人。
为了获得子文件夹,您需要在请求对象上使用一个方法。
例如,为了列出“GLM-L2-LCFA/2021/140/05”子文件夹中的所有对象,添加 Aws::String &prefix:
bool ListObjects(const Aws::String& bucketName, const Aws::String &prefix,
const Aws::Client::ClientConfiguration& clientConfig) {
Aws::S3::S3Client s3_client(clientConfig);
Aws::S3::Model::ListObjectsRequest request;
request.WithBucket(bucketName).WithPrefix(prefix);
auto outcome = s3_client.ListObjects(request);
if (!outcome.IsSuccess()) {
std::cerr << "Error: ListObjects: " <<
outcome.GetError().GetMessage() << std::endl;
}
else {
Aws::Vector<Aws::S3::Model::Object> objects =
outcome.GetResult().GetContents();
for (Aws::S3::Model::Object& object : objects) {
std::cout << object.GetKey() << std::endl;
}
}
return outcome.IsSuccess();
现在,传递以下内容:
Aws::Client::ClientConfiguration clientConfig;
std::string bucket = "noaa-goes16";
std::string prefix = "GLM-L2-LCFA/2021/140/05";
ListObjects(bucket, prefix, clientConfig);
中提琴!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.