Как загрузить файлы из хранилища Google - PullRequest
0 голосов
/ 02 октября 2019

Я хочу отобразить изображение, сохраненное в хранилище Google с URL или PATH, сохраненным в моей базе данных.

Я создаю файл в моем хранилище с помощью облачной функции

bucket.upload(thumbPath, {
      destination: join(bucketDir, thumbName),
    });

затем я создаю singnedUrl

const config = {
    action: 'read',
    expires: '03-01-2500',
  };
  const result = await thumbFile.getSignedUrl(config);

и сохраняю его в своей базе данных

Я хочу всегда иметь возможность загружать изображение с сохраненным URL. Это работает около недели. Но тогда я получаю 403 ошибки.

Мои правила хранения:

service firebase.storage {
  match /b/{bucket}/o {
   match /{allPaths=**} {
     allow read: if true;
     allow write: if request.auth != null;
   }
  }
}

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

1 Ответ

3 голосов
/ 02 октября 2019

Просто примечание: если срок действия подписанных вами URL истекает через 7 дней, это может быть связано с тем, что вы используете V4 API подписи (или метод getSignedUrl () вызывает этот API). Из документации :

X-Goog-Expires: время, в течение которого подписанный URL-адрес оставался действительным, измеряется в секундах от значения в X-Goog-Date. В этом примере срок действия подписанного URL истекает через 15 минут. Самое длинное значение срока действия - 604800 секунд (7 дней).

С другой стороны, подпись V2 (вы можете проверить эту документацию ) не имеет ограничений по дате истечения срока действия ПодписанногоURL-адреса, которые генерируют.

Я не уверен, какую библиотеку вы используете для вызова функции getSignedUrl(), но я подозреваю, что она была обновлена ​​и изменила подписанный метод с V2 на V4, а теперьдля сгенерированных подписанных URL-адресов существует ограничение в 7 дней. Если вы хотите продолжать использовать их, возможно, поможет откат к предыдущей версии библиотеки, или вы можете напрямую вызвать API V2 для генерации URL-адресов.

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

...