gpt4 book ai didi

javascript - Firebase 功能 - 在上传到存储时调整大小并覆盖现有图像

转载 作者:行者123 更新时间:2023-11-30 07:20:49 24 4
gpt4 key购买 nike

所以我关注了Google's official sample用于创建云存储触发的 Firebase 函数,该函数将从上传的图像创建调整大小的缩略图并将它们上传到存储。这里简化了:

exports.generateThumbnail = functions.storage.object().onChange(event => {

// get the uploaded file data (bucket, name, type...)

// return if the file is not an image or name begins with "thumb_"

// download the uploaded image in a temporary local file,
// resize it using ImageMagick
// upload it to storage with the name "thumb_<filename>"

}

但是,当新的缩略图上传时,该函数会再次触发,如此循环。如果上传的文件有“thumb_”前缀,他们会通过返回来避免这种情况。

然后您得到两张图片(原始图片和缩略图),我想用缩略图重写现有图片,所以我只有一张图片具有原始路径。

我不知道该怎么做,因为我不知道如何在不更改名称的情况下避开重新上传循环。我可以在上传缩略图后删除原始图像,但指向原始图像的链接已经返回并保存在实时数据库中(这些图像是用户的个人资料图片)。

最佳答案

在查看了 @google-cloud/storage npm 模块中的 bucket.js 文档后,我终于设法用缩略图覆盖了原始文件/路径图像并避免循环,

可以通过在上传缩略图时附加自定义元数据,并在下次触发该函数时测试该元数据来完成。

我将只发布我所做的更改,其余部分与链接示例中的相同。

这是测试:

const filePath = event.data.name
const metadata = event.data.metadata

if (metadata.isThumb) {
console.log('Exiting: Already a thumbnail')
return
}

这是 spawn promise 返回时的部分:

    return spawn(/* ... */)
}).then(_ => {
console.log('Thumbnail created locally.')
metadata.isThumb = true // We add custom metadata
const options = {
destination: filePath, // Destination is the same as original
metadata: { metadata: metadata }
}
// We overwrite the (bigger) original image but keep the path
return bucket.upload(/* localThumb */, options)
})

关于javascript - Firebase 功能 - 在上传到存储时调整大小并覆盖现有图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45265444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com