我想将图像上传到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(图像大小调整云功能)之后完成并更新图像(找不到解决方法)