google-cloud-platform - 使用 Google Cloud Storage 托管图像共享网站的图像

标签 google-cloud-platform google-cloud-storage

我正在构建一个图像共享网站,我希望上传的图像保存在云存储上。我正处于 POC 阶段,想了解以下内容:

  • 上传图像后,我是否可以生成一个图像 URL,该 URL 可以发送到我的 UI 服务,该服务可用于在前端呈现图像?
  • 我想阻止用户通过常用方法下载图像(右键单击另存为/右键单击在新选项卡中打开)。这可以从云存储本身完成,还是应该使用覆盖或水印等在前端实现。
  • 在这种情况下,我们有一个特定的下载按钮来下载图像,实现此目的的最佳方法是什么?我是否在后端服务器上下载图像,然后使用类似 gsutils 将其发送到前端?或者前端可以直接向云存储请求图片吗?

也欢迎任何其他能够实现上述目的的替代方案。谢谢!

最佳答案

您的问题需要云中的工程和架构。因此,我可以为您提供一些见解,但您需要深入了解每个部分才能正确实现您的网站

首先,用户不能直接访问Cloud Storage存储桶,需要将其设置为公开,任何人都可以访问所有内容。当用户需要读写文件时,使用signed Url mechanism

上传新图片时,您需要trigger a Cloud Function (上传文件时会发出一个事件,您可以在此事件上插入一个函数(或 pubsub ))。 为什么?因为叠加/水印/低分辨率版本需要在服务器端完成。您可以在网站上显示图片时执行此操作。但它减少了用户的延迟。这就是为什么我建议您在使用 Cloud Functions 上传文件时执行此新图像版本,并将其存储在 Cloud Storage 中(在另一个目录中,例如 thumbnail)

因此,您需要在数据库中保存2个路径:原始图像和处理后的图像。在网站上,您显示处理后的图像,单击下载按钮时,您会生成一个签名 URL 以下载原始图像。


ACL 将被弃用,或者至少 Google 不推荐。拥有统一的授权策略(基于 IAM 服务)是 Google 推荐的最佳实践。

但是你可以实现同样的目标 enter image description here

但是,在这种情况下,您无法限制对原始版本目录和缩略图目录的访问。用户可以自由访问所有内容,下载、上传和删除他们想要的内容。

如果这是您的用例,那就完美,否则...使用签名网址!

关于google-cloud-platform - 使用 Google Cloud Storage 托管图像共享网站的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64604072/

相关文章:

google-app-engine - 有没有办法通过 Google Datastore 事件触发 Google Cloud Function?

sql - MERGE 语句是否可以从 BigQuery 字段集群中获益?

java - 谷歌云存储: 401 unauthorized error

google-cloud-storage - Google Cloud Storage - GSUtil 更新失败,因为文件被另一个进程使用

java - 如何从独立的 Java 应用程序(而不是从 GAE 网络应用程序)连接到本地谷歌云存储?

google-compute-engine - 谷歌云平台性能 : how many users

load-balancing - 谷歌云 HTTP(S) 负载平衡器将保持 tcp 连接打开多长时间?

ajax - 带有 Google Storage 的 CORS 策略允许来 self 的来源,但不存在 'Access-Control-Allow-Origin' header

google-cloud-platform - 如何在谷歌云存储 (Python) 中获取 blob 的 URI

python - 如何从谷歌云存储桶读取音频文件并在datalab笔记本中使用ipd播放