【问题标题】:google cloud object permission disappear谷歌云对象权限消失
【发布时间】:2016-08-18 00:42:56
【问题描述】:

我目前正在使用 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 阅读器

虽然这是我要设置的文件权限,但是原来的3个默认文件权限已经没有了。有什么办法可以让我的 3 个默认文件权限保留并拥有这个新文件权限?任何帮助表示赞赏。

【问题讨论】:

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


    【解决方案1】:

    “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();
    

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 2017-12-24
      • 2018-07-25
      • 2018-07-02
      • 2016-12-21
      相关资源
      最近更新 更多