【问题标题】:Setting an object ACL using header from REST api is not working使用来自 REST api 的标头设置对象 ACL 不起作用
【发布时间】:2013-05-15 10:25:37
【问题描述】:

我正在使用 REST api 从 appengine 将文件写入 Google 存储。

我的代码如下所示:

        url = 'http://storage.googleapis.com/' + bucketName + filePath

    LOG.debug('Attempting to write file: ' + url)

    '''
    compute expiry time one year in the future
    '''
    expiresDate = datetime.utcnow() + timedelta(days=zconfig.CACHE_EXPDAY)
    formatStr = '%a, %d %b %Y %H:%M:%S GMT'

    start_cloud = time.time()

    headers = {'Content-Type' : mime,
               'Content-Length' : len(imageBytes),
               'Cache-Control' : 'Expires=' + expiresDate.strftime(formatStr),
               'x-goog-api-version' : '2',
               'x-goog-acl' : 'public-read'}

    resp, content = http.request(url, 'PUT', body=imageBytes, headers=headers)

根据 google storage api docs,REST api 采用“x-goog-acl”标头,可以更改对象上的 ACL。

但是,在创建此对象后,ACL 仍未设置为 public-read。我可以从 gsutil 以及 GS 浏览器中看到这一点。

谁能告诉我我做错了什么?

编辑:jterrace 指出我没有将标头传递给请求。我修好了。但它仍然没有在对象上设置公共读取 ACL。

【问题讨论】:

  • 您是否忘记将 headers 字典传递给请求函数?

标签: google-app-engine google-cloud-storage


【解决方案1】:

看起来您实际上并没有将标头字典传递给请求函数:

resp, content = http.request(url, 'PUT', body=imageBytes)

应该是:

resp, content = http.request(url, 'PUT', body=imageBytes, headers=headers)

【讨论】:

  • 谢谢,我错过了。但是,即使这样做了,它仍然没有在对象上设置公共读取 ACL。
  • 应该可以。如果不是,您能否发布 PUT 调用的完整 HTTP 请求和响应?
  • 不幸的是,我不能。我可以在我的 GAE 日志中看到失败。我无法在本地运行该应用程序,因为它使用 AppAssertion 凭据。看到你在谷歌工作,我可以离线给你发详细信息吗?
  • 也许我误会了什么。我运行我的场景,对象出现在谷歌存储中。但是,当我在浏览器中访问谷歌云存储时,该对象的“公开共享”选项被禁用。但是,如果我使用 curl,我可以将对象视为匿名用户。公开共享选项与通过 HTTP 对匿名用户可见的选项不同吗?
  • 试用新的云控制台:cloud.google.com/console "gsutil getacl gs://bucket/object" 返回什么?
【解决方案2】:

虽然我不确切知道为什么/如何,但我认为当您访问新旧控制台时,您没有以项目所有者身份登录。如果您没有获取/设置对象 ACL 的权限,旧控制台将不会显示“公开共享”选项(并且不允许您切换它)。从某种意义上说,新控制台更好,因为它实际上会告诉您这一点。

您能否仔细检查您登录的用户是否是项目的所有者?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2013-09-18
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    相关资源
    最近更新 更多