首页 > 解决方案 > 网站托管在 App Engine 上,如何访问云存储中的图像?

问题描述

我在 App 引擎上有一个 Web 应用程序,在 Firestore 中有数据,在云存储中有一些图像。我可以很好地与 Firestore 通信以获取数据,例如带有文件路径的文件名:

集合名称“猫”

'name': 'Black Cat'
'filename': 'cat_black.jpg'

在云存储中,我有一个以存储我的猫文档的 firestore 中的集合命名的存储桶。在存储桶中有一个名为“cat_black.jpg”的 jpg 文件。如何以只有我的应用引擎才能获取和显示照片的安全方式链接到此文件?

# App Engine Web UI

<img src="https://storage.cloud.google.com/Cats/cat_black.jpg">

我需要编辑存储桶的权限吗?

编辑:我知道我的 App Engine 创建了自己的存储桶,因此默认情况下它应该可以访问存储桶,我需要先在 Python 中检索图像吗?我正在考虑为每个 img src 使用 jinja2 模板函数来运行 API 请求并获取其各自的图像。

标签: google-app-enginegoogle-cloud-storage

解决方案


默认情况下,当您为项目创建存储桶时,您的应用程序拥有读取和写入它所需的所有权限

  1. 如果您想设置权限以允许其他用户访问存储桶及其内容,请参阅设置存储桶权限

  2. 如果您想在没有身份验证的情况下将其公开,则需要(授予所有用户对读者的权限)[ https://cloud.google.com/storage/docs/access-control/making-data-public]

您还可以查看有关设置 Google Cloud Storage的说明以了解更多详细信息。

有多种方法可以引用存储桶中的对象: http://BUCKET_NAME.storage.googleapis.com/OBJECT_NAMEhttp://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME

不要忘记使用 BUCKET_NAME。

默认 AppEngine 存储桶的名称为:<project-id>.appspot.com。请注意,它使用projec-idNOT 项目名称。因此,要引用默认存储桶,您需要使用以下命名约定:

http://<project-id>.appspot.com.storage.googleapis.com/OBJECT_NAME 或者 http://storage.googleapis.com/<project-id>.appspot.com/OBJECT_NAME

您不需要先在 Python 中检索图像。


推荐阅读