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

数据库触发firebase函数从URL下载图像并保存到存储区

颛孙成益
2023-03-14

当我的数据库用“photo_url”字段更新时,我想下载图像并将其保存到存储区

exports.saveToStorage = functions.database.ref(`/images/${itemImageRef}`)
.onWrite(event => {
  const filePath = event.data.val();
  const filename = filePath.split('/').pop();

  var download = request.get(filePath).on('error', (err) => {
    console.log(err)
  })
  .pipe(fs.createWriteStream(filename));

  download.on('finish', () => {
    const bucket = gcs.bucket('id.appspot.com');
    const storagePath = `images/${filename}`;

    return bucket.upload(download, { destination: storagePath })
    .then(() => {
      console.log('success upload');
    });
  });
});

共有1个答案

公良信然
2023-03-14

有了@jobsamuel建议的帖子,代码现在可以工作了:

exports.saveToStorage = functions.database.ref(`/images/${itemImageRef}`)
.onWrite(event => {

  const filePath = event.data.val();
  const filename = filePath.split('/').pop();

  const bucket = gcs.bucket('id.appspot.com');
  const remoteWriteStream = bucket.file(filename).createWriteStream({
    metadata: { contentType: 'image/jpeg' }
  });

  request(filePath).pipe(remoteWriteStream)
  .on('error', (err) => console.log(err))
  .on('finish', () => console.log('success save image'));

});

通过将请求结果直接管道到bucket,它通过跳过写入本地文件的步骤来解决问题,我怀疑这是我的原始代码失败的原因。另外,不要忘记为图像设置contentType。

 类似资料:
  • 如何获得下载URL? 我有点糊涂了。现在,我被困在修改后的功能更新。下面是我对管理的初始化。

  • 我编写了一个Firebase云函数,可以通过REST API访问该函数。代码如下所示。 我需要做的是,当用户通过“Web服务URL”从前端提交一些值时。 1)我需要将这些数据保存在Firebase实时数据库中。 2.)我参考了网上的几个教程,不明白在下面的代码中做了什么。

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

  • 我正在使用一个Vaadin上传组件,到目前为止,我已经成功地将一个图像上传到一个目录,并在成功上传后在面板组件中显示它。在这之后,我想做的是把它也插入到数据库中。我有一个名为Show的表,它有一个名称、日期和图像。在Show类中,我尝试将图像作为字节数组或Blob。 在上传成功的方法中,我想将文件转换为字节数组,到目前为止我已经尝试过了: 我也试过: uIP它实际上是我的上传ImagePresen

  • 我试图用Java从Firebase存储下载一个图像到android studio应用程序的imageView中。我已经浏览了stackoverflow超过6个小时,所以我很可能读到了任何“类似”的问题。我已经尝试了各种方法,但最多的建议和似乎是最简单的是使用滑翔。我无法让它工作,也找不到错误。我甚至在一个普通的谷歌图片链接尝试,它仍然显示空白。 我用过的代码 我也试过这个代码 而这个代码 给出lo