【发布时间】:2022-01-23 03:55:18
【问题描述】:
我使用以下 Java 代码将对象添加到具有公共读取权限的谷歌云存储,以便任何人都可以读取该文件:
try {
gcsService.createOrReplace(file, new GcsFileOptions.Builder()
.mimeType("image/jpeg")
.acl("public-read").build(),
ByteBuffer.wrap(data));
} catch (IOException ex){
// catch error
}
但是当我在 GCP 控制台中访问云存储时,如果我尝试编辑文件的权限,我会收到此通知以及此错误:
由于您无权了解本网站的公开访问状态 对象,显示的公共 URL 可能无效。
当我将文件写入云存储时,我可以做些什么,这样它既具有公共读取权限,又允许我,项目所有者,有权编辑它的权限?
当我是项目所有者时,我无法编辑自己对象的权限,这似乎有点愚蠢。
编辑:
我也在考虑使用新的云存储 API。这是我到目前为止的代码。我怎样才能使 ACL 为项目所有者(我)所用,并使其可公开阅读?
Storage storage = StorageOptions.getDefaultInstance().getService();
BlobId blobId = BlobId.of(bucket, object);
BlobInfo blobInfo = BlobInfo.newBuilder(blobId)
.setContentType(mimeType)
.setAcl(Arrays.asList(Acl.of(Acl.User.ofAllUsers(), READER)))
.build();
Blob output = storage.create(blobInfo, data);
【问题讨论】:
-
嗨,BlueBoy。你在这方面有什么进展吗?我试图在下面提供答案。你有没有机会检查一下,这有意义吗?如果我的回答有用,请点击它左侧的点赞按钮 (▲)。如果它回答了您的问题,请单击复选标记 (✓) 接受它。这样其他人就知道你得到了(足够的)帮助
-
@PriyashreeBhadra 这并没有真正帮助,因为我正在寻找 Java 中的代码解决方案,而不仅仅是权限如何工作的广泛描述。您的回答听起来更像是文档,而不是获取我在问题中编写的代码并从中添加/减去以使其工作。不过谢谢!
-
感谢您指出您真正需要的是“为项目所有者(您)制作 ACL 并使其可公开阅读的代码?”。我将分享一个GitHub comment link,我认为这会对您有所帮助。
-
关注它提到
storage.create(coverBlob, coverImage, BlobTargetOption.predefinedAcl(PredefinedAcl.PUBLIC_READ))的地方;将预定义的 ACL 设置为 PUBLIC_READ。 PUBLIC_READ 预定义 ACL 对应于设置以下权限:Object owner gets OWNER access、allUsers get READER access而.acl(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER)))只需设置以下权限即可为 blob 设置 ACL:allUsers get READER access -
另外,这里是code,您可以在其中授予所有者访问单个用户帐户或所有项目所有者的权限。让我知道它是否对您有用。我想改进我的答案,使其看起来不像文档,并且与您的答案更相关。祝你有美好的一天!
标签: google-app-engine google-cloud-platform google-cloud-storage