如何检查存储桶是否已存在于 AWS S3 中
How to check if bucket already exists in AWS S3
如何使用 Java SDK 检查存储桶是否已存在于我的 Aws S3 帐户中?
使用下面的代码
AmazonS3ClientBuilder.defaultClient().doesBucketExistV2(bucketName);
检查存储桶是否在全球范围内存在,如果具有此名称的存储桶在全球范围内存在,则 returns 为真,即使我不是该存储桶的所有者或我无权访问该存储桶。
我理解以这种方式制作此方法的意图,以便它允许我们确定存储桶名称的可用性,但这不是我需要的。
当然,它会抛出我以后无法访问它的异常,但它 returns 说明存在具有此名称的存储桶。
我想检查我的 S3 帐户中是否存在具有给定名称 的存储桶,以便我可以对其执行操作。
一个可能的解决方案是 list
所有存储桶并在返回的列表中搜索我的存储桶,我觉得这在性能方面不是很好(如果我错了请纠正我)因为那里可能有数十万个桶,在其中搜索效率不高。
如何确定我的 S3 帐户中是否存在 存储桶而不检查全局存在?
HeadBucket
请求即可完成工作。
HeadBucketRequest headBucketRequest = HeadBucketRequest.builder()
.bucket(bucketName)
.build();
try {
s3Client.headBucket(headBucketRequest);
return true;
} catch (NoSuchBucketException e) {
return false;
}
SDK 1.x 没有 HeadBucketRequest
构建器,也没有 NoSuchBucketException
。
万一有人正在使用 AWS SDK for Java 1.x 寻找答案,这有效:
private boolean checkAccessToBucket(final String bucketName) {
try {
final HeadBucketRequest request = new HeadBucketRequest(bucketName);
s3Client.headBucket(request);
return true;
} catch (AmazonServiceException ex) {
if (ex.getStatusCode() == 404 | ex.getStatusCode() == 403 || ex.getStatusCode() == 301) {
return false;
}
throw ex;
} catch (Exception ex) {
LOGGER.error("Cannot check access", ex);
throw ex;
}
}
如何使用 Java SDK 检查存储桶是否已存在于我的 Aws S3 帐户中?
使用下面的代码
AmazonS3ClientBuilder.defaultClient().doesBucketExistV2(bucketName);
检查存储桶是否在全球范围内存在,如果具有此名称的存储桶在全球范围内存在,则 returns 为真,即使我不是该存储桶的所有者或我无权访问该存储桶。
我理解以这种方式制作此方法的意图,以便它允许我们确定存储桶名称的可用性,但这不是我需要的。 当然,它会抛出我以后无法访问它的异常,但它 returns 说明存在具有此名称的存储桶。
我想检查我的 S3 帐户中是否存在具有给定名称 的存储桶,以便我可以对其执行操作。
一个可能的解决方案是 list
所有存储桶并在返回的列表中搜索我的存储桶,我觉得这在性能方面不是很好(如果我错了请纠正我)因为那里可能有数十万个桶,在其中搜索效率不高。
如何确定我的 S3 帐户中是否存在 存储桶而不检查全局存在?
HeadBucket
请求即可完成工作。
HeadBucketRequest headBucketRequest = HeadBucketRequest.builder()
.bucket(bucketName)
.build();
try {
s3Client.headBucket(headBucketRequest);
return true;
} catch (NoSuchBucketException e) {
return false;
}
SDK 1.x 没有 HeadBucketRequest
构建器,也没有 NoSuchBucketException
。
万一有人正在使用 AWS SDK for Java 1.x 寻找答案,这有效:
private boolean checkAccessToBucket(final String bucketName) {
try {
final HeadBucketRequest request = new HeadBucketRequest(bucketName);
s3Client.headBucket(request);
return true;
} catch (AmazonServiceException ex) {
if (ex.getStatusCode() == 404 | ex.getStatusCode() == 403 || ex.getStatusCode() == 301) {
return false;
}
throw ex;
} catch (Exception ex) {
LOGGER.error("Cannot check access", ex);
throw ex;
}
}