如何使用AWS CPP SDK检查AWS S3密钥是否存在?

时间:2019-02-07 10:33:46

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

我使用 S3 SDK CPP ,并且具有以下情况:

  1. 我收到了一些从客户端发送到服务器的信息(客户端想从 S3 下载)
  2. 发送信息后,我会创建一个 S3 密钥
  3. 我要检查 S3
  4. 上的密钥是否存在(有文件)
  5. 我创建了一个预签名URL,允许客户端从 S3
  6. 下载文件
  7. 发送URL到客户端
  8. 客户端下载文件

在执行步骤4之前,我想检查该密钥在S3上是否确实存在。客户端无法下载不存在的文件。

我有一个AWS::S3Client对象。我真的需要为此创建一个 TransferManager 还是有一种简单的方法来使用客户端对象来处理此问题?

客户端本身与 S3 没有关系,因此我无法在那里进行检查。服务器必须完成所有工作。

2 个答案:

答案 0 :(得分:1)

针对该对象发出经过身份验证的HTTP HEAD请求。您可以使用:

引用:

  

HEAD操作从对象检索元数据而不返回   对象本身。如果您只感兴趣,此操作很有用   在对象的元数据中。要使用HEAD,您必须具有对   对象。

答案 1 :(得分:1)

我找到了一个结果:

auto client = Aws::MakeShared<Aws::S3::S3Client>("client", getCredentials(), getClientConfig());
Aws::S3::Model::HeadObjectRequest request;
request.WithBucket(<bucketname>).WithKey(<s3key>);
const auto res = client->HeadObject(request);
res.IsSuccess(); //Is key existing on s3?