google云对象权限消失

google cloud object permission disappear

我目前正在使用 JSON API Java 库将对象上传到 Google Cloud Storage 并尝试更改上传对象的权限。当我第一次上传文件时,有 3 个默认文件权限是:

Project owners-projectId OWNER

Project editors-projectId OWNER

Project viewers-projectId OWNER

上传后,我尝试使用我的代码添加一个新的文件权限,让所有用户都可以访问它 reader 我的代码是:

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 消失了,取而代之的是:

User allUsers Reader

虽然这是我想设置的文件权限,但是原来的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();