【发布时间】:2020-11-06 11:07:15
【问题描述】:
如何使用 Java SDK 检查存储桶是否已存在于我的 Aws S3 账户中?
使用下面的代码
AmazonS3ClientBuilder.defaultClient().doesBucketExistV2(bucketName);
检查存储桶的全局存在,如果具有此名称的存储桶全局存在则返回 true,即使我不是该存储桶的所有者或我无权访问该存储桶。
我了解以这种方式制作此方法的意图,以便它允许我们确定存储桶名称的可用性,但这不是我需要的。 当然,它会抛出我以后无法访问它的异常,但它会返回说明该名称的存储桶存在。
我想检查具有给定名称的存储桶是否存在于我的 S3 帐户中,以便我可以对其执行操作。
一个可能的解决方案是list所有存储桶并在返回的列表中搜索我的存储桶,我认为这不是一个好的性能(如果我错了,请纠正我),因为可能有数百个数千个桶,在其中搜索效率不高。
如何确定我的 S3 帐户中是否存在未检查全局存在的存储桶?
【问题讨论】:
-
HeadBucketapi 是否满足您的需求? 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