将图像文件存储在猫鼬模式的二进制数据中并以html形式显示图像

2024-05-07

我正在使用 Express、Node.js 和 Mongodb 创建上传和显示图像文件的网页。

我使用 schema 将图像的二进制文件保存在 mongodb 中。

这是我在index.js和db.js中的一点代码..

var Post = mongoose.Schema({
   image: {data: Buffer, contentType: String}
});

var post= new Post({ });
post.image.data=fs.readFileSync(req.file.path);
post.image.contentType='image/png';

这是我提交图像文件并搜索帖子后的 mongo shell 部分及其图像字段

"image:     {"data:BinData(0,"iVBORw0KGgoAAAANSUhEUE....(I
just cut off the rest of the code.. cuz it was too long)          
rkJggg=="), 
"contentType" : "image/png" } 

所以看起来它成功地将图像文件的二进制数据保存在mogngodb中,

但我的问题是如何使用二进制数据在网页上显示图像。如何转换二进制缓冲区数据来创建图像标签?

<img src= "data:{{image.contentType}};base64,{{image.data}}">

我尝试了这个,但它给了我一个错误:

Failed to load resource: net::ERR_INVALID_URL

你们能告诉我如何解决这个问题吗? 我将非常感谢您的帮助:(((


首先,您必须将缓冲区数据转换为 Base64。您可以在后端或前端进行,这并不重要。只需使用yourBufferData.toString('base64')。然后就可以使用它了。

但是,我建议使用另一种方法来存储图像而不是存储二进制数据。假设你使用nodejs。您可以使用该二进制数据在存储库中创建图像fs.writeFile方法。然后您可以将该图像路径存储在记录(db)中。之后,只需将文件路径放入ng-src =“您保存的文件路径”即可。这是我使用的示例:

var path = 'upload/profiles/' +req.body.userId + '_profile.jpg';
      fs.writeFile(path, base64data, function(err) {
        if (err) return next(err);
        User.findByIdAndUpdate({
          _id: req.body.userId
        }, {
          $set: {
            profileImg: 'upload/profiles/' +req.body.userId + '_profile.jpg'
          }
        }, function(err, user) {
          if (err) return next(err);
          return res.send(user);
        });
      });

  <img ng-src="savedpath">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将图像文件存储在猫鼬模式的二进制数据中并以html形式显示图像 的相关文章

随机推荐