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

问题描述 投票:3回答:1

我使用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

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

python google-app-engine google-cloud-platform google-cloud-storage
1个回答
2
投票

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

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

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

  1. 切换到您的水桶项目
  2. 导航到云存储>浏览器以查看存储桶列表
  3. 在Requester支付桶的列中,一个按钮告诉您它是打开还是关闭。单击该按钮并确认在两种状态之间切换。

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

© www.soinside.com 2019 - 2024. All rights reserved.