Как сохранить URL-адреса хранилища Firebase в Firestore - PullRequest
0 голосов
/ 30 октября 2018

Я хочу загрузить изображение в хранилище Firebase, затем создать копии нескольких разрешений например. 128px, 256px или 512px. После этого сохраните преобразованные изображения downloadUrls в firestore для удобства поиска со стороны клиента.

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

Решение У меня пока есть решение, которое работает для загрузки только одного изображения .

let coachId = firebase.firestore().collection('_coaches').doc().id
let coachAddPromise = firebase.firestore().collection('_coaches').doc(coachId).set(newCoach)
let coachStoragePromise = storage.ref('/coaches' + '/' + coachId)
    .child('cover').put(files[0])

Promise.all([coachAddPromise, coachStoragePromise])
    .then(function (results) {
        let downloadUrlPromise = results[1].ref.getDownloadURL()
        return downloadUrlPromise
    }).then(function (url) {
        let coachUpdatePromise = firebase.firestore().collection('_coaches').doc(coachId).update({imageUrl: url})
        return coachUpdatePromise
    }).then(function (added) {
        console.log('Coach added')
    })

С этого момента я создал облачную функцию, которая создает различные разрешения, которые я хочу.

exports.onFileChangeResize = functions.storage.object().onFinalize(async (object) => {
...(create 128px, 256px etc copies of the image)...
})

Но я не могу получить image_urls для преобразованных изображений, чтобы хранить их в хранилище, как я делал раньше.

Решения и идеи, которые я рассматриваю:

a) Использование объекта хранения onFinalize (облачная функция изменения размера изображения) для обновления местоположений image_urls (множество обновлений местоположений image_urls для управления в облачных функциях)

b) Загрузите файл изображения напрямую с помощью облачных функций и обновите image_urls после завершения загрузки (сложно реализовать)

в) Постарайтесь дождаться завершения onFinalize (функция изменения размера изображения в облаке) и впоследствии обновить изображение (не могу найти способ сделать это)

...