【问题标题】:Provide a user project to Google Cloud Storage bucket向 Google Cloud Storage 存储分区提供用户项目
【发布时间】:2018-08-07 01:28:40
【问题描述】:

我使用 Google Cloud Storage 来存储我的文件。 我有我的存储桶,我可以存储我的图像,但是当我将图像的 url 放在一个 href 中时,我有这个消息:

<Error>
  <Code>UserProjectMissing</Code>
  <Message>
       Bucket is a requester pays bucket but no user project provided.
  </Message>
</Error>

这是我访问我的存储桶的代码:

client = storage.Client(project=PROJECT_ID).from_service_account_json(SERVICE_ACCOUNT_FILE)
bucket = client.bucket(BUCKET_NAME)
blob = bucket.blob(filename)
blob.upload_from_string(file_stream, content_type=content_type)
url = blob.public_url

所以我想知道如何提供一个用户项目。

【问题讨论】:

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


    【解决方案1】:

    这个Python code sample 向您展示了如何在 Python 中为您的请求提供付费项目。

    虽然在您的代码中,storage.Client(project=PROJECT_ID) 是与存储桶的项目一起调用的,但 client.bucket(BUCKET_NAME) 不会告诉存储桶哪个项目必须为此请求付费。对于Requester pays的bucket,在获取bucket时还需要提供project。这可以是同一个项目PROJECT_ID 或不同的项目,例如REQUESTERS_PROJECT_ID.

    client = storage.Client(project=PROJECT_ID).from_service_account_json(SERVICE_ACCOUNT_FILE)
    bucket = client.bucket(BUCKET_NAME, REQUESTERS_PROJECT_ID)
    blob = bucket.blob(filename)
    blob.upload_from_string(file_stream, content_type=content_type)
    url = blob.public_url
    

    您可以为每个将对存储桶的请求(例如获取图像或上传图像)计费的存储桶进行配置。

    默认是对该桶的项目进行计费,(通过与该项目关联的计费账户进行计费)。我认为这是最常见的设置。

    或者,请求者支付意味着由请求引起的部分费用由请求中包含的计费项目支付。这种设置在多个项目(例如大公司中的不同公司或部门)共享同一个存储桶但对某些成本单独计费的用例中可能有意义。 (不过,存储费用和提前删除费用始终计入存储桶的项目)

    云存储的 GCP 文档中的更多信息:Requester Pays。

    我认为您无意中打开了请求者付费。您可以在 Cloud Console 中打开/关闭 Requester pay,如下所示:

    1. 切换到你的bucket的项目

    2. 导航到 Cloud Storage > 浏览器 以查看存储桶列表

    3. 在桶的 Requester pays 列中,有一个按钮告诉您它是 On 还是 Off。单击该按钮并确认以在两种状态之间切换。

    如果您关闭 Requester pays,您的代码应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 2017-11-15
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 2017-07-07
      相关资源
      最近更新 更多