谷歌云对象权限消失

时间:2016-04-24 17:50:34

标签: java json google-app-engine google-cloud-storage acl

我目前正在使用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个默认文件权限以及拥有此新文件权限?任何帮助表示赞赏。

1 个答案:

答案 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();