测试谷歌云存储桶是否存在?

时间:2017-04-12 05:48:42

标签: java google-cloud-platform google-cloud-storage bucket

我写了这段代码

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,因此我得到Bucket exist

我确实看到this但是在我的代码中无法使用它,因为storage来自我在程序中使用的不同包。

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

1 个答案:

答案 0 :(得分:1)

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

相反,检查存在桶的推荐方法是尝试创建存储桶并查找返回的错误。要么成功获得HTTP响应,要么失败并显示409错误,表明存储桶已经存在。请注意,您仍应重试5xx错误代码。