我通过java使用Google Storage API,并使用0.9.4-alpha
(之前是0.9.2-alpha
)版本的GSAPI。
当我创建一个blob时,我使用这段代码:
bucket.create(
getFileName(req),
fileToInputStream(req),
Bucket.BlobWriteOption.predefinedAcl(getPredefinedAcl(req.getAccessType()))
);
并且它正常工作,我有机会更改PredefinedAcl。但是,如果我尝试执行此操作:
blob.update(Storage.BlobTargetOption.predefinedAcl(Storage.PredefinedAcl.PRIVATE));
我将遇到异常com.google.cloud.storage.StorageException: Cannot provide both a predefinedAcl and access controls.
并收到消息:
{
"code" : 409,
"errors" : [ {
"domain" : "global",
"message" : "Cannot provide both a predefinedAcl and access controls.",
"reason" : "conflict"
} ],
"message" : "Cannot provide both a predefinedAcl and access controls."
}
我没有找到关于这个问题的任何内容。 我想知道,更新访问权限的真正方法是什么?我看到了Acl课程并且都与之相关,但我不确定这是否是我想要的,因为我需要能够为所有用户更改公共/私人特定文件
答案 0 :(得分:0)
我找到了有关如何更改文件访问权限的解决方案。 对于所有用户来说,这似乎是:
Acl acl = Acl.of(Acl.User.ofAllUsers(), Acl.Role.READER);
blob.createAcl(acl); // public for all
blob.deleteAcl(acl.getEntity()); // private for all
此代码显示如何为所有用户提供公共访问权限,然后使文件成为私有文件。