谷歌云对象权限消失
问题描述:
我目前使用JSON API Java库将对象上传到Google Cloud Storage,并尝试更改上传对象的权限。当我第一次上传的文件,有这3默认的文件权限:谷歌云对象权限消失
项目业主,专案编号OWNER
项目编辑,专案编号OWNER
项目的观众,专案编号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读者
虽然这是文件权限我想要设置,原来的3个默认文件权限就没有了。有没有办法让我的3默认文件许可保留以及有这个新文件的权限?任何帮助表示赞赏。
答
“objects.update()”调用设置对象的整个元数据。您的代码会创建一个空白元数据,添加“allUsers - > READER”权限,并将对象的元数据设置为此新元数据,这就是为什么您的所有其他权限(以及您在对象上设置的任何其他元数据)全部消失的原因。
你想要做的是添加一个权限,而不用另外改变元数据。有几种好的方法可以实现,但最直接的方法是调用“objectAccessControls()。insert()”代替:
ObjectAccessControl newControl = new ObjectAccessControl()
.setEntity("allUsers").setRole("READER");
Storage.ObjectAccessControls.Insert request = client.objectAccessControls().insert(
Bucket, file, newControl);
req.execute();