1

我使用S3 SDK CPP并具有以下场景:

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

在执行第 4 步之前,我想检查密钥是否真的存在于 S3 上。客户端无法下载无论如何都不存在的文件。

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

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

4

2 回答 2

3

我找到了一个可行的解决方案:

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?
于 2019-02-13T14:18:36.937 回答
1

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

去引用:

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

于 2019-02-07T16:55:25.403 回答