【问题标题】:How to check an AWS S3 key for existence with the AWS CPP SDK?如何使用 AWS CPP 开发工具包检查 AWS S3 密钥是否存在?
【发布时间】:2019-07-01 10:50:01
【问题描述】:
我使用 S3 SDK CPP 并有以下场景:
- 我收到一些信息从客户端发送到我的服务器(客户端想要从 S3 下载)
- 根据发送的信息,我创建了一个 S3 密钥
- 我想检查 S3 上是否存在密钥(有文件)
- 我创建了一个预签名 URL,允许客户端从 S3 下载文件
- 向客户端发送 URL
- 客户端下载文件
在执行第 4 步之前,我想检查密钥是否真的存在于 S3 上。客户端无法下载不存在的文件。
我有一个AWS::S3Client 对象。我真的需要为此创建一个 TransferManager 还是有一种简单的方法可以使用客户端对象来处理它?
客户端本身与 S3 没有关系,所以我无法在那里检查它。服务器必须完成所有工作。
【问题讨论】:
标签:
c++
amazon-web-services
amazon-s3
aws-sdk
aws-sdk-cpp
【解决方案1】:
我找到了一个可行的解决方案:
auto client = Aws::MakeShared<Aws::S3::S3Client>("client", getCredentials(), getClientConfig());
Aws::S3::Model::HeadObjectRequest request;
request.WithBucket(<bucketname>).WithKey(<s3key>);
const auto response = client->HeadObject(request);
response.IsSuccess(); //Is key existing on s3?
【解决方案2】:
针对对象发出经过身份验证的 HTTP HEAD 请求。您可以使用:
引用:
HEAD 操作从对象中检索元数据而不返回
对象本身。如果您只感兴趣,此操作很有用
在对象的元数据中。要使用 HEAD,您必须对
对象。