【问题标题】:Download images to users local machines via Firebase Functions通过 Firebase Functions 将图像下载到用户本地计算机
【发布时间】:2021-08-19 19:54:13
【问题描述】:

是否可以通过 Firebase 功能直接将图像下载到用户本地计算机?遇到这种情况怎么办:

  1. 图像存储在 Firebase 存储中。
  2. 图像存储在其他云存储提供商上(我可以通过 url 访问它们)。

我不想通过 url 链接下载这些图片,以免泄露图片所在的 url。

【问题讨论】:

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


    【解决方案1】:

    是否可以通过 Firebase 功能直接将图像下载到用户本地计算机?

    不,这是不可能的。客户端必须与服务器联系才能下载内容。未经授权,不能将内容“推送”给客户端。这对客户端来说将是一个巨大的安全漏洞。

    这就是存在下载 URL 的原因 - 为客户端提供通过正常 HTTP 请求下载的内容。

    【讨论】:

      【解决方案2】:

      您可以使用 Google API 库创建预签名 URL。 Firebase 存储桶只是一个普通的 GCS 存储桶。像这样的:

      const admin = getFirebaseAdmin();
      let bucket = admin.storage().bucket(firebaseConfig.storageBucket);
      
      const f = bucket.file(location);
      if (!(await f.exists())) {
          throw logError(`No file found at specified location: ${location}`, functionName)
      }
      
      const url1 = await f.getSignedUrl({
          action: 'read',
          expires: new Date((new Date).getTime() + (24 * 60) * 60000)   // expires in 24 hours
      });
      const url = url1[0];
      
      return url;
      

      【讨论】:

      • 问题是:“我不想通过 url 链接下载这些图片,以免泄露图片所在的 url。”
      • 预签名 URL 创建一个临时 URL,您可以在一个小时后过期。在我的示例中,它会在一天后过期。
      • 此外,您实际上可以设置 Firebase 存储规则以阻止所有读取,然后允许通过此机制读取文件。这样可以避免创建“通过默默无闻的安全”问题 - 因为一旦您的临时预签名 URL 过期,这里就不存在公共 URL。
      猜你喜欢
      • 2019-08-10
      • 2012-05-28
      • 1970-01-01
      • 2013-03-24
      • 2019-07-03
      • 2017-02-22
      • 1970-01-01
      • 2016-07-21
      • 2017-05-09
      相关资源
      最近更新 更多