有时无法在Google Cloud Storage中创建存储桶

时间:2019-04-01 12:33:22

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

我一直在尝试按照Java link中的指南在Google Cloud Storage中创建存储桶。我有一个检查存储桶是否存在并返回布尔值的方法,像这样

private boolean checkIfBucketExists(String bucketName) {
   return storage.get(bucketName, Storage.BucketGetOption.fields()) != null
}

还有另一种实际创建存储桶的方法,像这样

public Bucket createBucket(String bucketName) {
    if (checkIfBucketExists(bucketName)) {
      System.out.println("Bucket already exists!");
    }
    return storage.create(
        BucketInfo.newBuilder(bucketName)
            // See here for possible values: http://g.co/cloud/storage/docs/storage-classes
            .setStorageClass(StorageClass.COLDLINE)
            // Possible values: http://g.co/cloud/storage/docs/bucket-locations#location-mr
            .setLocation("eu")
            .build());
  }

在创建存储桶时,有时会有些奇怪。例如,即使我在项目中没有现有的bucket,我也可以创建名为name-bucket的{​​{1}},但不能创建namebucket。它给了我这个错误

namebucket

是否可以在Google Cloud Storage中使用其他用户在其项目中选择的名称创建存储桶?我之所以不能选择名称Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden { "code" : 403, "errors" : [ { "domain" : "global", "message" : "myservice@project-id.iam.gserviceaccount.com does not have storage.buckets.get access to namebucket.", "reason" : "forbidden" } ], "message" : "myservice@project-id.iam.gserviceaccount.com does not have storage.buckets.get access to namebucket." } 是因为其他人在他们的项目中已经像这样命名了一个存储桶了吗?

1 个答案:

答案 0 :(得分:1)

是的,存储桶名称对于所有用户都是唯一的。

检查Documentation for bucket name considerations

  

存储桶名称驻留在单个Cloud Storage名称空间中,这意味着每个存储桶名称都必须是唯一的。如果您尝试使用已分配给现有存储桶的名称来创建存储桶,则Cloud Storage会显示一条错误消息。但是,删除存储桶后,其名称可以由您或其他用户在创建新存储桶时重用