我目前正在开发一个在 GAE 上运行的应用程序,该应用程序将接受图像上传,然后使用 GCS 客户端库将其写入存储(以前使用云存储 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>
我正在使用以下代码初始化写入:
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);
该应用程序将文件的 url 返回给客户端,正如我所提到的,这对任何 Google 用户都适用,但任何其他用户在尝试访问https://storage.cloud.google.com/mybucket/filename时都会被重定向.png网址。此外,当我登录到云存储 Web 界面时,当我将鼠标悬停在“SHARED PUBLICLY”列中的框(其中有一个破折号)时,我会收到一条悬停消息“您无权查看或编辑此对象的ACL 的”。但是,我可以毫无问题地删除该文件,并且我登录的帐户被设置为 API 项目的所有者。
我确定我在这里遗漏了一些简单的东西,但是我已经阅读了所有文档并且已经为此工作了几天。任何见解都值得赞赏。