Когда изображение загружается в хранилище Firebase, я использую облачную функцию, чтобы изменить его размер.Затем я беру URL-адрес этого изображения и вставляю его в базу данных Firestore.Когда запись в БД обновляется, внешнее приложение видит это изменение и создает тег с URL-адресом, установленным как 'src'.Сетевой вызов возвращает 401.
Насколько я могу судить, мне нужно либо внести белый список доменов где-то в админ-панели Google, либо я получаю неправильный URL-адрес для начала.
КогдаЯ смотрю на файл в консоли Firebase, я получаю URL с другим доменом, чем тот, который был получен в облачной функции.Так как домен хранения отличается, было бы логично настроить белый список.Если да, то где это?
Я мог сделатьзаменить строку, и если я захожу в БД и вручную изменяю домен, первую часть пути и добавляю параметр alt=media
, изображение загружается.Я надеюсь, что у кого-то есть менее хакерский ответ, чем этот.
Я настроил корзину, чтобы разрешить чтение.
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read;
}
}
}
Моя облачная функция работает следующим образом: https://angularfirebase.com/lessons/image-thumbnail-resizer-cloud-function/. Вот важные части:
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp();
export const imageResize = functions.storage
.object()
.onFinalize(async object => {
const bucket = admin.storage().bucket(object.bucket)
bucket.upload(imagePath, {
destination: join(bucketDir, imageName)
}).then(async (data) => {
const file = data[0]
const [imageLink] = await file.getSignedUrl({
action: 'read',
expires: '04-03-2100'
})
// also tried this
// const [fileMeta] = await file.getMetadata()
// const imageLink = fileMeta.selfLink
И затем я записываю его в соответствующую запись Firestore DB.Запись работает нормально, URL не работает.
Ожидается URL-адрес, полученный из file.getSignedUrl (), должен загружаться в тег изображения
Actual URL возвращает 401 при загрузке в тег изображения.