我目前正在使用JSON API Java库将对象上传到Google Cloud Storage,并尝试更改上传对象的权限。当我第一次上传文件时,有3个默认文件权限,即:
项目所有者 - projectId OWNER
项目编辑 - projectId OWNER
项目观众 - projectId OWNER
上传后,我尝试使用我的代码添加新文件权限,以使所有用户都可以访问它作为阅读器,我的代码是:
StorageObject objectMetadata = new StorageObject();
// set access control
List<ObjectAccessControl> acl = Lists.newArrayList();
acl.add(new ObjectAccessControl().setEntity("allUsers").setRole("READER"));
objectMetadata.setAcl(acl);
Storage.Objects.Update req = client.objects().update(Bucket, file, objectMetadata);
req.execute();
但是,在代码成功运行后,3个默认文件权限已经消失,而是替换为:
用户allUsers Reader
虽然这是我想要设置的文件权限,但原来的3个默认文件权限已经消失。是否有任何方法可以保留我的3个默认文件权限以及拥有此新文件权限?任何帮助表示赞赏。
答案 0 :(得分:0)
“objects.update()”调用设置对象的整个元数据。您的代码创建一个空白元数据,添加“allUsers - &gt; READER”权限,并将对象的元数据设置为此新元数据,这就是为什么所有其他权限(以及您在对象上设置的任何其他元数据)全部消失的原因
您要做的是添加权限,而不更改元数据。有几种很好的方法可以实现,但最直接的方法是调用“objectAccessControls()。insert()”而不是:
ObjectAccessControl newControl = new ObjectAccessControl()
.setEntity("allUsers").setRole("READER");
Storage.ObjectAccessControls.Insert request = client.objectAccessControls().insert(
Bucket, file, newControl);
req.execute();