google-cloud-platform - 使用 Google Cloud Storage 托管图像共享站点的图像
问题描述
我正在构建一个图像共享站点,我希望将上传的图像保存在 Cloud Storage 上。我处于 POC 阶段,想了解以下内容:
- 上传图像后,我是否可以生成一个图像 URL,该 URL 可以发送到我的 UI 服务,该服务可用于在前端呈现图像?
- 我想阻止用户从通常的方法下载图像(右键单击另存为/右键单击在新选项卡中打开)。这可以从云存储本身完成,还是应该使用覆盖或水印等在前端实现。
- 在这种情况下,我们有一个特定的下载按钮来下载图像,实现这一点的最佳方法是什么?我是否在后端服务器上下载图像,然后使用类似的东西将其发送到前端
gsutils
?或者前端可以直接向云存储请求图片吗?
也对实现上述目标的任何其他替代方案持开放态度。谢谢!
解决方案
您的问题需要云中的工程和架构。因此,我可以为您提供一些见解,但您需要更深入地了解每个部分以正确实现您的网站
首先,用户不能直接访问 Cloud Storage 存储桶,您需要将其设置为公开,任何人都可以访问所有内容。当用户需要读取或写入文件时,使用签名的 Url 机制
上传新图片时,您需要触发 Cloud Function(上传文件时会发出一个事件,您可以在此事件上插入一个函数(或pubsub))。为什么?因为覆盖/水印/低分辨率版本需要在服务器端完成。您可以在网站上显示图片时执行此操作。但它减少了用户的延迟。thumbnail
这就是为什么我建议您在使用 Cloud Functions 上传文件并将其存储在 Cloud Storage 中(在另一个目录中,如)时执行此新图像版本
因此,您需要在数据库中保存 2 个路径:原始图像和处理后的图像。在站点上,您显示处理后的图像,当单击下载按钮时,您会生成一个签名 URL 以下载原始图像。
ACL 将被弃用,或者至少不被 Google 推荐。拥有统一的授权策略(基于 IAM 服务)是 Google 推荐的最佳做法。
但是,在这种情况下,您不能限制对原始版本目录和缩略图目录的访问。用户可以免费访问所有内容,下载、上传和删除他们想要的内容。
如果这是您的用例,那就完美了,否则......使用签名的网址!
推荐阅读
- asp.net - 如何通过正则表达式从调用 URL 获取路径段,包括正斜杠?- ASP.NET 核心
- javascript - eval 从 JSON.parse 不起作用的字符串中获取数组对象的替代方法
- javascript - 如何仅在用户单击提交表单而不是在 ASP.NET MVC 中的文本框中更改值后才触发数据验证?
- java - 使用 google-api-services-oauth2 进行 Oauth 2.0 身份验证
- list - Flutter:当我在提供程序槽函数中更新我的列表时,我的屏幕没有更新
- makefile - 如何避免来自 makefile 中特定文件或库的备注/警告/错误消息?
- java - 如何获取放置在平面上的选定模型的节点并限制sceneform ARcore中的模型重复
- linux-kernel - Vim Parrot Os 未安装
- alasql - 我正在尝试将数据导出到 excel
- python - 为什么 plt.savefig() 正在保存具有一定大小的图像,但是当我打开它时,它是空白的?