Хорошо. Мне пришлось применить другой подход к этой задаче, потому что я предполагаю, что нет способа сохранить исходный URL. По сути, теперь я делаю все (изменение размера изображения, удаление исходного изображения, получение URL-адреса, обновление базы данных пользователя) в одной функции запуска хранилища.
return destBucket.file(filePath).download({
destination: tempFilePath
})
.then(() => {
console.log('The file has been downloaded to', tempFilePath)
return spawn('convert', [tempFilePath, '-resize', '140x140', tempLocalJPEGFile])
}).then(() => {
console.log('JPEG image created at', tempLocalJPEGFile)
metadata.modified = true
return destBucket.upload(tempLocalJPEGFile,
{
destination: JPEGFilePath,
metadata: { metadata: metadata }
})
}).then(() => {
console.log('JPEG image uploaded to Storage at', JPEGFilePath)
return destBucket.file(filePath).delete()
}).then(() => {
console.log('Original file deleted', filePath)
const logo = storageRef.file(JPEGFilePath)
return logo.getSignedUrl({ action: 'read', expires: '03-09-2491' })
}).then((url) => {
const newRef = db.collection("user").doc(uid)
return newRef.set({
profile: {profileImg: url[0]}
}, {
merge: true
})
}).then(()=> {
fs.unlinkSync(tempFilePath);
fs.unlinkSync(tempLocalJPEGFile)
console.log('User database updated')
return null
})
})
Я не уверен, что это лучшая практика, поэтому не стесняйтесь комментировать или обновлять. Я также не знал, есть ли лучший способ получить имя папки из корзины, где хранится изображение, которое называется значением идентификатора пользователя (userImg / [userIdHere] /image.jpg), которое мне нужно для обновления БД, поэтому я использовал код разделения старой моды
const uid = filePath.split("/").slice(1,2).join("")
Однако этот триггер позволяет использовать корзину только для пользовательских изображений, поскольку мы не можем использовать триггер для определенной папки в корзине