首页 > 解决方案 > 如何使用 MongoDB/GridFS 从我的 API 将文件作为 base-64 数据 URL 字符串返回?

问题描述

我的 MongoDB 中有一组联系人

在此处输入图像描述

这些联系人有头像(或“个人资料图片”)

这是上述用户的个人资料图片:

在此处输入图像描述

...以及该文件的一大块(只有一个)。

在此处输入图像描述

我正在尝试获取 ^^^ 那个 ^^^ 块并将其解析为 base-64 数据 URL,以便将它从我的服务器返回到我的应用程序并在<img>src 属性中使用它。

app.get('/queryContacts', (req, res) => {
  const getContacts = async query => {
    let contacts = await db
      .collection('contacts')
      .find(query)
      .toArray();
    return contacts;
  };

  const getImages = async id => {
    let imageUrl = 'data:image/jpg;base64';

    await bucket
      .openDownloadStream(new ObjectID(id))
      .on('data', chunk => {
        imageUrl += chunk.toString('base64');
      })
      .on('end', () => {
        return imageUrl;
      });
  }

  getContacts({account_id: new ObjectID(req.query.id)}).then(contacts => {
    Object.keys(contacts).forEach(key => {
      getImages(contacts[key].image_id).then(url => {
        console.log(url); // undefined
        contacts[key].imageUrl = url;
      });
    });

    res.json(contacts);
  });
});

问题是当我尝试这个时,URL 是undefined因为getImages()没有等待'end'事件完成。

标签: htmlreactjsmongodbasync-awaitgridfs

解决方案


推荐阅读