我使用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
所以我想知道如何提供用户项目。
答案 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。
我认为您无意中打开了请求者付款。您可以在云控制台中打开/关闭请求者付款,如下所示:
切换到您的水桶项目
导航至云存储&gt;浏览器以查看存储桶列表
在存储桶的请求者付款列中,有一个按钮,告诉您它是开启还是关闭。单击该按钮并确认在两种状态之间切换。
如果您关闭请求者付款,您的代码应该按原样运行。