【问题标题】:How to hide Google Storage bucket path and image name from URL如何从 URL 中隐藏 Google Storage 存储桶路径和图像名称
【发布时间】:2019-04-25 08:21:09
【问题描述】:

我正在使用 Google 存储来存储我的用户的个人资料照片。我有几千张照片。

现在图片被保存在一个桶中,如下所示: 数据/图像/配置文件/USER_ID.jpg

所以图片的 URL: https://storage.cloud.google.com/data/images/profiles/USER_ID.jpg

我不希望用户只知道他们的 USER_ID 就可以看到其他人的图片,而且它必须是 USER_ID 以便开发人员更轻松地搜索。

我无法使用签名 URL,因为我的用户没有 Google 帐户,并且存储中的图片是从移动应用程序中获取的。

有没有办法让文件名在存储中保持原样,但简单地从 URL 中隐藏路径+文件名?

https://storage.cloud.google.com/fc720d5c05411b03e5e2a6692f8d7d61.jpg -> points to https://storage.cloud.google.com/data/images/profiles/USER_ID.jpg

谢谢

【问题讨论】:

    标签: firebase google-cloud-storage firebase-storage


    【解决方案1】:

    您有多种选择。以下是一些:

    • 让用户从服务器请求另一个用户的 URL,然后让服务器决定是否允许用户查看图像。如果是这样,让服务器(确实有一个服务帐户)生成一个签名 URL 并将其传递回用户(或重定向到它)。这样,虽然用户可能知道另一个用户的用户 ID 和他们的图片的 URL,但他们仍然看不到图片,除非服务器同意这是可以的。
    • 使用 Firebase 存储管理图像,图像仍将存储在 GCS 中,但会为您提供 Firebase 的身份验证支持。
    • 通过您的应用(应用引擎应用或在 GCE 或 GKE 中运行的应用)代理图像。这使您可以隐藏有关图像来源的所有信息,包括用户 ID,但缺点是要求所有数据都通过您的服务。
    • 重新检查您的要求。 “在开发人员方面更轻松的搜索”可能没有您想象的那么重要,您需要权衡它的好处与解决它的成本。

    【讨论】:

      【解决方案2】:

      另一个选项是 AppEngine 上的Google Images API。您可以将您的 Cloud Storage 对象与 Google 图片 API 相关联,并使用此 API 的优势 - 保护 URL、使用 URL 参数转换和调整图片大小。 您只需为存储在 GCS 中的每个图像准备 servingURL 并将此服务 URL 持久化(例如在 Google Datastore 中)

      ImagesService imagesService = ImagesServiceFactory.getImagesService();
      ServingUrlOptions suo = ServingUrlOptions.Builder
          .withGoogleStorageFileName(gcsImageObjectPath)
          .secureUrl(true);
      String servingUrl = imagesService.getServingUrl(suo);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-18
        • 2018-02-04
        • 1970-01-01
        相关资源
        最近更新 更多