如何解决从客户端浏览器访问永久 GCS 对象?
我正在开发一个基本的 Flask 应用程序。我有一个页面,我只想显示一个下载器链接,指向我的 GCS 存储桶中名为 twilio-billing
的每个文件。我尝试使用签名网址,但它仅限于 7 天,并且不应公开,因为它是私人文档。
到目前为止我所拥有的:
- 一个名为
twilio-gcs@mousset005.iam.gserviceaccount.com
的服务帐户,拥有Storage Admin
、Storage Object Admin
和Storage Object Viewer
权限 - 为
json
生成了twilio-gcs@mousset005.iam.gserviceaccount.com
身份验证密钥。该文件使用os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "config/gcp.json"
加载到我的 Flask 应用程序上。我已经能够将文件从我的 Flask 应用程序直接上传到该存储桶中。
现在我想让用户能够下载他的账单。我可以尝试使用两个不同的 url 来访问存储在我的存储桶中的对象:
-
https://storage.cloud.google.com/twilio-billing/2021-1-Twilio-receipt.pdf
:有效,但我必须使用自己的 Google 帐户登录。如果没有,我将被重定向到 gmail 登录。 -
https://storage.googleapis.com/twilio-billing/2021-1-Twilio-receipt.pdf
:从来没有工作过。即使使用 HTTP 并且当我登录我的 Google 帐户时,也会收到错误403
。Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.
您有什么建议吗?
web_messaging/blueprints/texting/templates/temporary.html
<!DOCTYPE html>
<html lang="en">
<head>
<Meta charset="UTF-8">
<Meta http-equiv="X-UA-Compatible" content="IE=edge">
<Meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Document</title>
</head>
<body>
<a href="https://storage.googleapis.com/twilio-billing/2021-1-Twilio-receipt.pdf">link A (error 403)</a>
<a href="https://storage.cloud.google.com/twilio-billing/2021-1-Twilio-receipt.pdf">link B (must be logged in to my Google Cloud Account) </a>
</body>
</html>
web_messaging/blueprints/texting/routes.py
# returning the list all of files
@texting.route("/billing",methods=['GET'])
@login_required
def billing():
bucket = gcp_storage.get_bucket('twilio-billing')
for blob in bucket.list_blobs(prefix=''):
print(blob)
# will generate my list of link here to render it on my html
return render_template("temporary.html")
解决方法
您可以将对象访问权限设置为公开。请参阅此 Google 云存储文档,https://cloud.google.com/storage/docs/access-public-data。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。