【问题标题】:How to check if bucket already exists in AWS S3如何检查 AWS S3 中是否已存在存储桶
【发布时间】:2020-11-06 11:07:15
【问题描述】:

如何使用 Java SDK 检查存储桶是否已存在于我的 Aws S3 账户中?

使用下面的代码

        AmazonS3ClientBuilder.defaultClient().doesBucketExistV2(bucketName);

检查存储桶的全局存在,如果具有此名称的存储桶全局存在则返回 true,即使我不是该存储桶的所有者或我无权访问该存储桶。

我了解以这种方式制作此方法的意图,以便它允许我们确定存储桶名称的可用性,但这不是我需要的。 当然,它会抛出我以后无法访问它的异常,但它会返回说明该名称的存储桶存在。

我想检查具有给定名称的存储桶是否存在于我的 S3 帐户中,以便我可以对其执行操作。

一个可能的解决方案是list所有存储桶并在返回的列表中搜索我的存储桶,我认为这不是一个好的性能(如果我错了,请纠正我),因为可能有数百个数千个桶,在其中搜索效率不高。

如何确定我的 S3 帐户中是否存在未检查全局存在的存储桶?

【问题讨论】:

  • HeadBucket api 是否满足您的需求? docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html
  • 我不认为“全球性”意味着它返回您的 S3 账户之外的存储桶,只是它们没有像很多 AWS 资源那样的区域
  • @mattfreake 基本上假设我的 S3 帐户没有名为“mybucket”的存储桶,上面共享的代码 sn-p 返回 true,因为 globe 中的其他人实际上有一个名为“mybucket”的存储桶.它不会返回我的存储桶或它的内容,但它返回 true 因为存在具有此名称的存储桶。
  • 首先,您将需要对 S3 存储桶的权限,否则您将无法访问该存储桶。然后,挑战将是它是否实际上与您的凭证在同一个账户中 - 例如,您的凭证可能有权访问其他账户中的存储桶。看看getBucketAcl()
  • @jellycsc 是的,headBucket api 是我一直在寻找的东西。太感谢了。 :)

标签: amazon-web-services amazon-s3 aws-java-sdk aws-java-sdk-2.x


【解决方案1】:

正如 cmets 中提到的那样,headBucket 完成了这项工作。

HeadBucketRequest headBucketRequest = HeadBucketRequest.builder()
            .bucket(bucketName)
            .build();

    try {
        s3Client.headBucket(headBucketRequest);
        return true;
    } catch (NoSuchBucketException e) {
        return false;
    }

【讨论】:

    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 2019-11-10
    • 2023-03-14
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2016-11-12
    • 2013-09-06
    相关资源
    最近更新 更多