gpt4 book ai didi

java - 插入对象时,Google Cloud Storage 在 ACL 定义中期望哪个域?

转载 作者:行者123 更新时间:2023-11-30 11:30:13 26 4
gpt4 key购买 nike

我正在使用谷歌存储 API 来保存和检索部署在 GAE 上的应用程序中的图像。我成功地检索了图像,但是当涉及到坚持时,我收到错误 400,详细信息如下:

400 OK
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Required",
"reason" : "required"
}],
"message" : "Required"
}

基于 this information我想我可能不需要它,所以我没有尝试。当我添加 appspot URL 时,我正在与谷歌云存储进行通信,我得到了这个:

400 OK
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Required",
"reason" : "required"
}, {
"domain" : "global",
"message" : "Could not find domain \"mydomain.appspot.com\".",
"reason" : "invalid"
} ],
"message" : "Required"
}

我遵循了以下步骤:

  1. 开启了对 Google Cloud Service 的 JSON API 访问
  2. 创建了一个服务帐户
  3. 下载p12文件
  4. 将 maven 配置为不对文件进行编码
  5. 配置 maven 以包含存储服务 api
  6. 使用服务帐户电子邮件地址作为服务帐户创建了 GoogleCredential,将 StorageScopes.DEVSTORAGE_FULL_CONTROL 添加到范围并链接到私钥文件 (p12)
  7. 使用上面的凭证、http 传输等实例化了一个 Storage 对象

我正在使用在 StorageObject 对象上设置的 ObjectAccessControl 对象列表,如下所示:

...
//email from the service account client id configuration in the google cloud console
myAclList.add(new ObjectAccessControl()
.setEntity("user-" + settings.getEmail()).setRole("OWNER"));
//confused about what domain I should use; tried none,
myAclList.add(new ObjectAccessControl()
.setEntity("domain-" + settings.getDomain())
.setRole("READER"));
StorageObject objectMetadata = new StorageObject()
.setName("blahblah")
.setAcl(myAclList)
.setContentDisposition("attachment");
Storage.Objects.Insert insertObject = storage.objects()
.insert(settings.getBucket(), objectMetadata, mediaContent);
insertObject.execute(); //400 error happens here
...

我应该为域发送什么?我是否缺少在控制台中配置某些东西?我没主意了。

非常感谢您的任何建议!

编辑:我使用的是 v1beta2-rev2-1.15.0-rc 版本的 google-api-services-storage jar。

最佳答案

您看到“找不到域\"mydomain.appspot.com\"”的原因。”是“domain-”前缀指的是 Google Apps for Business 域中的所有帐户,而不是 appengine 域名。例如,如果您正在为您的公司 fakecompany.com 使用 Google Apps,并且您想要为 fakecompany.com 下的所有帐户授予对存储桶的读取访问权限,您可以指定“domain-fakecompany.com”来引用所有此类帐户。

我猜 mydomain.appspot.com 是一个 appengine 域名而不是 Google Apps for Business 域,这会导致那种错误。

更新:还有一个误解值得指出。服务帐户不一定具有将新对象插入您拥有的存储桶的权限。确保它对存储桶具有明确的 WRITE 或更好的权限,或者,如果您使用的是默认存储桶 ACL,它至少是您项目的“编辑者”。

最后,确保您的存储桶名称和对象名称在插入对象时存在且不为空。这是一个非常容易遇到的问题,所提供的错误消息并不总是很清楚。

关于java - 插入对象时,Google Cloud Storage 在 ACL 定义中期望哪个域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17914807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com