java - 在 Google Cloud Storage 中创建存储桶有时会失败
问题描述
我一直在尝试按照此链接中的指南使用 Java 在 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
,但不是namebucket
,即使我的项目中没有现有namebucket
的。它给了我这个错误
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."
}
是不是这样,在 Google Cloud Storage 中,我无法使用其他用户在其项目中选择的名称创建存储桶?我不能选择名称的namebucket
原因是因为其他人已经在他们的项目中命名了这样的存储桶吗?
解决方案
是的,存储桶名称对所有用户都是唯一的。
存储桶名称位于单个 Cloud Storage 命名空间中,这意味着每个存储桶名称都必须是唯一的。如果您尝试使用已分配给现有存储桶的名称创建存储桶,Cloud Storage 会以错误消息进行响应。但是,删除存储桶后,您或其他用户可以在创建新存储桶时重复使用其名称。
推荐阅读
- apache-spark - java.lang.UnsatisfiedLinkError: jep.Jep.init(Ljava/lang/ClassLoader;ZZ) on google cloud dataproc
- javascript - How to create singleton classes in Javascript?
- file - 从 Google Cloud Compute 上的 Windows Server 映射 Windows 上的共享文件夹
- flutter - 使用颤振块架构的下拉按钮示例
- c# - 如果正在运行,请取消异步任务并再次运行它(刷新行为)
- javascript - 如何使用带有 fetch 功能的 promise 访问数据库?
- performance - JMeter 不执行我的测试计划的所有请求
- sql - SQL Server 数据清理
- python - 从我的网站页面获取文本:Python 脚本
- python - workon venv 和 venv\Scripts\activate 有什么区别吗