当前位置: 首页 > 知识库问答 >
问题:

Firebase功能-上传到存储器时调整和覆盖现有图像

潘琨
2023-03-14

因此,我遵循了Google的官方示例来创建Cloud Storage触发的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_”前缀来避免这种情况。

然后您最终得到两张图像(原始图像和缩略图),我想用缩略图重写现有图像,因此我只有一张具有原始路径的图像。

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

共有1个答案

呼延弘方
2023-03-14

查看铲斗后。js文档在谷歌云/存储的npm模块中,我终于设法用缩略图覆盖了原始文件/路径,也避免了循环

可以在上载缩略图时附加自定义元数据,并在函数下次触发时测试该元数据。

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

以下是测试:

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

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

下面是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)
})
 类似资料:
  • 我想在上传到Firebase存储之前调整图像的大小。 我的问题是:FireBase在其Uri上上传图像。我从图库意图中获取图像,并将其放在上,然后像这样调整其大小: firebase根据Uri像这样上传它(如果有其他上传文件的方法,它将非常有用!): 有没有办法获取

  • 我从Firebase存储中获取图像,用相机拍照,或者从图书馆中挑选一张。当其中一个完成时,我有一个类来存储,以便在需要时使用它。 现在我需要将此图像上传到Firebase存储(修改或新建,无所谓)。Firebase允许我使用以下选项之一:或,每个选项分别需要或。 我怎么能把我的,并从它获得一个或用于上传? -- 或者,为了解决这个问题,当我从Firebase存储中检索图像时,如何获取图像的? 无论

  • 问题内容: 我想将图像的下载URL放入Firebase数据库中。我可以将图像上传到存储中,但无法弄清楚如何将URL与其余的“帖子”一起放入数据库。 问题答案: 像这样组织您和func: 接下来,只需连接并保存到您的节点即可。 您也可以查看我有关上传数据并将URL保存到数据库的答案 希望能帮助到你

  • 我试图上传一个图像文件,我得到了使用Imagepicker。 但上面的代码返回以下错误 VERBOSE-2:ui\u dart\u状态。cc(186)]未处理的异常:MissingPluginException(未找到方法任务的实现#通道插件上的startPutFile.flatter.io/firebase_存储)#0 MethodChannel_invokeMethod包:flatter/..

  • 我正在尝试上传图像到firebase,以及其他字符串和双数据类型。 我现在正在考虑两个选项,一个是上载imageUrl到firebase实时数据库,当我检索它时,我将检索一个imageUrl并将其转换为图像。 谢谢你的帮助!我很感激。

  • 的控制台输出是正确的,我相信使用的是正确的。 上载的控制台输出如下: 然而,当我查看firebase存储时,新文件夹和图像不在那里。火药库没有变化。为什么它实际上不储存在仓库里?