【问题标题】:How can I cache the getDownloadUrl() calls on the client with Firebase Firestore?如何使用 Firebase Firestore 在客户端上缓存 getDownloadUrl() 调用?
【发布时间】:2020-04-29 08:47:40
【问题描述】:

我在后端数据库中存储了一些图像/视频的 Firebase 存储路径,移动客户端在需要时使用这些路径来获取下载 URL:

import {firebase} from '@react-native-firebase/storage';

// e.g. 'images/stars.jpg'
const getDownloadUrlForFilePath = (filePath: string | null): Promise<string> => {
  if (filePath === null) {
    throw 'Path is null!';
  }
  return getDownloadUrlForRef(firebase.storage().ref(filePath));
};

const getDownloadUrlForRef = (ref): Promise<string> => {
  return ref.getDownloadURL();
};

问题是我在很多地方都需要相同的图像。因此,我经常致电getDownloadURL() 来检索相同的下载网址。这导致手机对我调试网络流量时出现的相同资源发出多个 http 请求。

在我当前的实现中,我没有将检索到的下载 URL 存储在移动客户端中的任何位置。

我想找到一种方法,让应用只为同一路径获取一次下载 URL 并缓存它。 Firebase SDK 是否支持此功能?

【问题讨论】:

    标签: typescript react-native google-cloud-storage firebase-storage react-native-firebase


    【解决方案1】:

    下载 URL 从生成之日起一直有效,直到您撤销它(从 Firebase 控制台)。所以存储起来确实是安全的,可以重复使用。

    事实上,大多数通过 Firebase 使用 Cloud Storage 的应用程序会在上传图片后立即生成下载 URL,然后将下载 URL 以及有关图片的元数据存储在数据库中。

    你通常会:

    1. 将下载 URL 传递给需要未经身份验证访问图像的客户端。
    2. 将路径传递给需要对图像进行身份验证访问的客户端,例如,因为他们可能需要更新数据。

    如果您只存储下载 URL(与许多应用程序一样),则在第二种情况下,您将通过调用 Storage.refFromUrl() method 将该下载 URL 映射回相应的路径。

    【讨论】:

      【解决方案2】:

      您可以使用AsyncStorage 在应用程序本地保存 URL,并且无需发出 HTTPS 请求即可在应用程序中的任何组件上获取这些 URL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-27
        • 1970-01-01
        • 1970-01-01
        • 2020-08-07
        • 2018-06-06
        • 2019-11-12
        • 1970-01-01
        • 2020-01-26
        相关资源
        最近更新 更多