使用ACL集不能公开读取的上载文件

use*_*673 4 google-app-engine google-cloud-storage

我目前正在开发一个在GAE上运行的应用程序,它将接受图像上传,然后将其写入可存储的GCS客户端库(之前使用的Cloud Storage API具有相同的结果).我看到的问题是,在编写完成后,只有在您已使用Google帐户登录时才能访问这些文件.我已启用结算功能,并且我的GAE ID(XXXXXX@appspot.gserviceaccount.com)作为团队成员作为所有者添加到Google API项目中

我使用了命令:( gsutil setdefacl public-read gs://mybucket 实时代码中的存储桶名称是正确的).

我的ACL中有以下条目:

<Entry>
  <Scope type="AllUsers"/>
    <Permission>
      READ
  </Permission>
</Entry>
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码初始化写入:

GcsService gcsService = GcsServiceFactory.createGcsService();
GcsFilename filename = new GcsFilename(bucket, fileName);
GcsFileOptions options = new GcsFileOptions.Builder()
  .mimeType(mime)
  .acl("public-read").build();
GcsOutputChannel writeChannel = gcsService.createOrReplace(filename, options);
Run Code Online (Sandbox Code Playgroud)

该应用程序将文件的URL返回给客户端,正如我所提到的,对于任何Google用户都可以正常工作,但是当他们尝试访问https://storage.cloud.google.com/mybucket/filename时,会重定向任何其他用户.png网址.此外,当我登录云存储Web界面时,当我在"共享公共"列(其中有一个破折号)中移动框时,我收到一条悬停消息"您无权查看或编辑此对象ACL的".但是我可以毫无问题地删除该文件,并且我登录的帐户被设置为API项目的所有者.

我确信我在这里很容易丢失一些东西,但是我已经完成了所有的文档并且已经在这方面工作了几天.任何见解都表示赞赏.

jte*_*ace 5

公开阅读问题

storage.cloud.google.com域由云存储UI使用,该UI仅可作为登录用户访问.它不是API端点.你应该使用https://storage.googleapis.com/bucketname/objectnamehttps://bucketname.storage.googleapis.com/objectname.

编辑ACL的权限被拒绝

只有FULL_CONTROL具有对象的用户或对象的所有者才能查看对象的ACL.听起来这个对象属于您的服务帐户,并且您的帐户没有FULL_CONTROL该对象,因此它无法查看ACL.您仍然可以删除该对象,因为FULL_CONTROL桶上的用户始终可以删除存储桶中的对象.