测试谷歌云存储桶是否存在?
问题描述:
即使我通过一个未存在桶名称由此我得到Bucket exist
我写了这个代码测试谷歌云存储桶是否存在?
private void doesBucketExist(String bucketName) {
try {
GoogleCredential credential = myUtil.getCredential();
JsonFactory jsonFactory = new JacksonFactory();
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
Storage.Builder storageBilder = new Storage.Builder(transport, jsonFactory, credential);
Storage storage = storageBilder.build();
Objects objects = storage.objects();
List listObjects = objects.list(bucketName);
if (listObjects != null && listObjects.getBucket().equalsIgnoreCase(bucketName)) {
System.out.println("Bucket exist");
} else {
System.out.println("Bucket does not exist");
}
} catch (Exception e) {
throw e;
}
}
这是给listObjects
。
我确实看到了this,但由于storage
与我在程序中使用的软件包不同,所以无法在我的代码中使用它。
如何确定指定的桶是否存在?
答
如果您无法访问存储桶,那么列出或获取存储桶都会遇到问题。您可能会收到404或403,具体取决于存储桶是否由其他人拥有。另外,不能保证检查一个桶是否存在这些方法之一,然后尝试创建它将会成功,因为有人可能会在两次调用之间创建桶。
取而代之,检查桶是否存在的推荐方法是尝试创建桶并查找返回的错误。要么它会成功通过HTTP响应,要么会失败并显示409错误,表明存储桶已经存在。请注意,您仍然应该重试5xx错误代码。
+0
我正在编写此代码来测试健康检查到Google桶,我必须返回尊重的http响应代码。我正在使用'com.google.api.services.storage'。我如何在这种情况下测试? – Extreme
您如何知道您传递的存储桶名称不存在?您是否尝试在开发控制台中创建具有名称的存储桶并且它可用?请注意,存储桶命名空间是全局的并且是公开可见的,因此直到您可以或不可以创建该命名空间时才会知道它是否存在:p –
是的,用我自己的名称进行测试,随机数作为存储桶的名称,它仍然如同它已经存在一样。 – Extreme
您是否可以尝试在开发人员控制台中创建具有名称的存储桶(例如,您自己的名称和随机数)以查看它是否仍存在? –