2017-04-12 159 views
1

即使我通过一个未存在桶名称由此我得到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与我在程序中使用的软件包不同,所以无法在我的代码中使用它。

如何确定指定的桶是否存在?

+0

您如何知道您传递的存储桶名称不存在?您是否尝试在开发控制台中创建具有名称的存储桶并且它可用?请注意,存储桶命名空间是全局的并且是公开可见的,因此直到您可以或不可以创建该命名空间时才会知道它是否存在:p –

+0

是的,用我自己的名称进行测试,随机数作为存储桶的名称,它仍然如同它已经存在一样。 – Extreme

+0

您是否可以尝试在开发人员控制台中创建具有名称的存储桶(例如,您自己的名称和随机数)以查看它是否仍存在? –

回答

0

如果您无法访问存储桶,那么列出或获取存储桶都会遇到问题。您可能会收到404或403,具体取决于存储桶是否由其他人拥有。另外,不能保证检查一个桶是否存在这些方法之一,然后尝试创建它将会成功,因为有人可能会在两次调用之间创建桶。

取而代之,检查桶是否存在的推荐方法是尝试创建桶并查找返回的错误。要么它会成功通过HTTP响应,要么会失败并显示409错误,表明存储桶已经存在。请注意,您仍然应该重试5xx错误代码。

+0

我正在编写此代码来测试健康检查到Google桶,我必须返回尊重的http响应代码。我正在使用'com.google.api.services.storage'。我如何在这种情况下测试? – Extreme