首页 > 解决方案 > 我想将图像从云功能保存到 Firestore 并获取 URL

问题描述

我想在云函数(TypeScript)上实现以下过程。

  1. 通过网址获取图片
  2. 将图像保存到云存储
  3. 获取保存在 Firestore 中的图像的 URL

我正在尝试使用以下代码移动它,有 2 个问题。

代码:

const bucket = admin.storage().bucket();
const url = 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png';

request(
  { method: 'GET', url: url, encoding: null },
  async function (error, response, body) {
    if (!error && response.statusCode === 200) {
      const file = bucket.file('test/test.png');

      const metadata = {
        contentType: 'image/png'
      };
      try {
        await file.save(body, metadata);
      } catch (err) {
        console.log(err);
      }
    }
  }
);

如果您能解释详细信息,将不胜感激。

标签: node.jsfirebasegoogle-cloud-firestoregoogle-cloud-functionsgoogle-cloud-storage

解决方案


您可能应该明白,当 URL 设置为保存的图像时,它默认为 Firebase 发出的另一个图像。您可能应该查看此文档以了解如何获取该 URL:https ://firebase.google.com/docs/storage/web/download-files 。一种可以将链接(您为其发布的)添加到文件中的方法,您应该将其添加到元数据中,如下所示:

const bucket = admin.storage().bucket();
const url = 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png';

request(
  { method: 'GET', url: url, encoding: null },
  async function (error, response, body) {
    if (!error && response.statusCode === 200) {
      const file = bucket.file('test/test.png');

      const metadata = {
        contentType: 'image/png',
        url // <- add url here
      };
      try {
        await file.save(body, metadata);
      } catch (err) {
        console.log(err);
      }
    }
  }
);

另外它可能需要这么长时间的原因是因为获取图像然后将图像添加到 Firebase。


推荐阅读