google-app-engine - 网站托管在 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 请求并获取其各自的图像。
解决方案
默认情况下,当您为项目创建存储桶时,您的应用程序拥有读取和写入它所需的所有权限
如果您想设置权限以允许其他用户访问存储桶及其内容,请参阅设置存储桶权限。
如果您想在没有身份验证的情况下将其公开,则需要(授予所有用户对读者的权限)[ https://cloud.google.com/storage/docs/access-control/making-data-public]
您还可以查看有关设置 Google Cloud Storage的说明以了解更多详细信息。
有多种方法可以引用存储桶中的对象:
http://BUCKET_NAME.storage.googleapis.com/OBJECT_NAME
或
http://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME
不要忘记使用 BUCKET_NAME。
默认 AppEngine 存储桶的名称为:<project-id>.appspot.com
。请注意,它使用projec-id
NOT 项目名称。因此,要引用默认存储桶,您需要使用以下命名约定:
http://<project-id>.appspot.com.storage.googleapis.com/OBJECT_NAME
或者
http://storage.googleapis.com/<project-id>.appspot.com/OBJECT_NAME
您不需要先在 Python 中检索图像。
推荐阅读
- javascript - 当使用带有条件的 $convert 和错误输出仍然是 NaN
- sql - 如何在 SQL 中使用 PIVOT 获得实际结果?
- spring - Spring Environment 类 - 使用动态键加载属性值
- laravel - 如何通过 1 laravel 更新字段的值
- c - 函数参数使用不一致不会导致编译器警告
- javascript - 缩放时自定义传单 divIcon 不停留在固定标记位置
- java - Wicket CheckBox 更改其他组件的可见性
- javascript - 如何防止其他组合框的相同值
- powershell - 如何知道对象属性的作用
- apache-spark - 如何尾纱原木?