为Google云端存储分区提供用户项目

时间:2018-02-27 11:50:46

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

我使用Google云端存储来存储我的文件。 我有我的水桶,我可以存储我的图像但是当我把我的图像的网址放在一个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

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

1 个答案:

答案 0 :(得分:2)

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

在您的代码中,使用存储桶项目调用storage.Client(project=PROJECT_ID)时,client.bucket(BUCKET_NAME)不会告诉存储区哪个项目必须为此请求付费。对于具有 Requester pays 的存储桶,您还需要在获取存储桶时提供项目。这可以是同一个项目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

我认为您无意中打开了请求者付款。您可以在云控制台中打开/关闭请求者付款,如下所示:

  1. 切换到您的水桶项目

  2. 导航至云存储&gt;浏览器以查看存储桶列表

  3. 在存储桶的请求者付款列中,有一个按钮,告诉您它是开启还是关闭。单击该按钮并确认在两种状态之间切换。

  4. 如果您关闭请求者付款,您的代码应该按原样运行。