如何将Firebase存储URL保存到Firestore

时间:2018-10-30 12:10:54

标签: firebase google-cloud-firestore firebase-storage sharp

我想将图像上传到Firebase存储,然后创建多个分辨率副本,例如。 128px,256px或512px。然后将转换后的图像downloadUrls保存到firestore中,以便从客户端轻松检索。

尽管这似乎是Firebase存储的标准用例,但我找不到任何资源或无法解决。

到目前为止,我拥有的解决方案仅适用于上传一张图片

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来将它们存储在firestore中。

我正在考虑的解决方案和想法:

a)使用存储对象onFinalize(图像调整大小的云功能)来更新image_urls位置(很多要在云功能中管理的image_urls位置更新)

b)直接使用云功能上传图像文件,并在上传完成后更新image_urls(难以实现)

c)尝试等待onFinalize(图像大小调整云功能)之后完成并更新图像(找不到解决方法)

0 个答案:

没有答案