谷歌云对象权限消失

谷歌云对象权限消失

问题描述:

我目前使用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();