Python 向Google云存储桶提供一个用户项目

Python 向Google云存储桶提供一个用户项目,python,google-app-engine,google-cloud-platform,google-cloud-storage,Python,Google App Engine,Google Cloud Platform,Google Cloud Storage,我使用谷歌云存储来存储我的文件。 我有我的bucket,我可以存储我的图片,但是当我把我的图片的url放在a href中时,我有这样一条消息: <Error> <Code>UserProjectMissing</Code> <Message> Bucket is a requester pays bucket but no user project provided. </Message> </Error

我使用谷歌云存储来存储我的文件。 我有我的bucket,我可以存储我的图片,但是当我把我的图片的url放在a 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根据您的请求提供付费项目

在代码中,
storage.Client(project=project\u ID)
与bucket的项目一起调用,
Client.bucket(bucket\u NAME)
不会告诉bucket哪个项目必须为此请求付费。对于请求者付费的bucket,在获取bucket时还需要提供一个项目。这可以是相同的项目
project\u ID
,也可以是不同的项目,例如
REQUESTERS\u project\u 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
您可以为每个将要为向bucket发出的请求付费的bucket进行配置(例如,获取图像或上载图像)

默认情况下,对bucket的项目进行计费(通过向与此项目关联的计费帐户收费)。我认为这是最常见的设置

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

云存储的GCP文档中有更多信息:

我想你是无意中开启了“请求者付费”。您可以在云控制台中打开/关闭请求者付费,如下所示:

  • 切换到bucket的项目

  • 导航到云存储>浏览器以查看存储桶列表

  • 在bucket的Requester pays列中,一个按钮告诉您它是开还是关。单击该按钮并确认在两种状态之间切换

  • 如果您关闭“请求者付费”,您的代码应该按原样工作