Как я могу кэшировать вызовы getDownloadUrl () на клиенте с помощью Firebase Firestore? - PullRequest
2 голосов
/ 12 января 2020

Я храню несколько путей Firebase Storage для изображений / видео во внутренней БД, и мобильный клиент использует их для извлечения 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(), чтобы получить тот же URL-адрес для загрузки. Это приводит к тому, что трубка отправляет несколько http-запросов на один и тот же ресурс, как это происходит при отладке сетевого трафика c.

Я не храню полученные URL-адреса для загрузки в мобильном клиенте где-либо в моей текущей реализации.

Я хотел бы найти способ, чтобы приложение получало URL-адрес для загрузки только один раз для одного и того же путь и кеш его. Поддерживается ли это Firebase SDK?

Ответы [ 2 ]

2 голосов
/ 12 января 2020

URL-адрес загрузки действителен с момента его создания до его отзыва (из консоли Firebase). Таким образом, его действительно безопасно хранить и использовать повторно.

Фактически большинство приложений, использующих облачное хранилище через Firebase, генерируют URL-адрес для загрузки сразу после загрузки изображения, а затем сохраняют URL-адрес для загрузки. в базе данных вместе с метаданными об изображении.

Обычно вы:

  1. Передаете URL-адрес загрузки клиентам, которым необходим неаутентифицированный доступ к изображению.
  2. Передайте путь клиентам, которым требуется аутентифицированный доступ к изображению, например, если им может потребоваться обновить данные.

Если вы сохраняете только URL для загрузки (как и многие приложения), вы ' сопоставим этот URL-адрес загрузки с соответствующим путем во втором случае, вызвав метод Storage.refFromUrl() .

0 голосов
/ 12 января 2020

Вы можете использовать AsyncStorage для локального сохранения URL-адресов в приложении, и вы можете получить эти URL-адреса без запроса HTTPS и для любого компонента в вашем приложении.

...