如何检查 AWS S3 中是不是已存在存储桶
Posted
技术标签:
【中文标题】如何检查 AWS S3 中是不是已存在存储桶【英文标题】: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 是我一直在寻找的东西。太感谢了。 :)
【参考方案1】:
正如 cmets 中提到的那样,headBucket
完成了这项工作。
HeadBucketRequest headBucketRequest = HeadBucketRequest.builder()
.bucket(bucketName)
.build();
try
s3Client.headBucket(headBucketRequest);
return true;
catch (NoSuchBucketException e)
return false;
【讨论】:
以上是关于如何检查 AWS S3 中是不是已存在存储桶的主要内容,如果未能解决你的问题,请参考以下文章