使用Google Cloud Storage托管图像共享站点的图像

问题描述

我正在构建图像共享站点,并且希望将上传的图像保存在Cloud Storage中。我正处于POC阶段,想了解以下信息:

  • 上传图片后,我是否可以生成一个图片URL,该URL可以发送到我的UI服务,该URL可用于在前端渲染图片
  • 我要防止用户通过常用方法下载图像(右键单击另存为,或右键单击在新选项卡中打开)。可以从Cloud Storage本身完成此操作,还是应该在前端使用叠加层或水印等实现它。
  • 在这种情况下,我们有一个特定的下载按钮来下载图像,实现此目的的最佳方法是什么?是否要在后端服务器上下载映像,然后使用gsutils之类的映像将其发送到前端?还是前端可以直接从Cloud Storage请求图像?

也欢迎实现上述目标的任何其他选择。谢谢!

解决方法

您的问题需要云中的工程和体系结构。因此,我可以为您提供一些见识,但是您需要更深入地研究各个部分才能正确地建立您的网站

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

上载新图像时,您需要trigger a Cloud Function(文件上载时会发出一个事件,您可以在此事件上插入一个函数(或pubsub))。 为什么?,因为叠加层/水印/低分辨率版本需要在服务器端完成。您可以在网站上显示图片时执行此操作。但这减少了用户的等待时间。这就是为什么我建议您在使用Cloud Functions上传文件时执行此新映像版本并将其存储在Cloud Storage中(在另一个目录中,例如>>> from courses.models import Event >>> x = Event.objects.last() >>> x.date_start = None >>> x.save()

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


ACL将被弃用,或者至少不被Google建议。 Google建议采用统一的授权策略(基于IAM服务)。

但是您可以实现相同的目标 enter image description here

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

如果这是您的用例,请完善,否则...使用签名的网址!