使用Mongo集合中的二进制数据作为图像源 [英] Using binary data from Mongo collection as image source

查看:12
本文介绍了使用Mongo集合中的二进制数据作为图像源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Express应用程序,将数据存储在mongo中,使用Jade作为视图引擎。我有一个简单的方法来获取特定集合中的文档,每个文档对应一个产品。图像是Base64编码的。当我尝试将其渲染为图像时,尽管它不起作用

我的路线是

exports.index = function(req, res){
   mongo.getProducts(function(data) {
      res.render('consumer/index', {user: req.session.user, products: data});
   });
};

调用的函数为

exports.getProducts = function(callback) {

   Product.find().exec(function(err, products){
      return callback(products);
   });
};

然后我的JADE文件具有以下代码

each val in products
  img(src="data:image/png;base64,'+#{val.image.data}+'", alt='Image', style="width: 20px; height: 20px")

直接在Mongo中查看文档(通过Robomongo),我得到了这个

我不知道我错过了什么,因为在另一个文件中,我使用jQuery数据表来显示文档,在那里使用相同的方法正确地呈现图像,下面是数据表代码的片段

"aoColumns": [
          {"mData": "name"},
          {"mData": "price"},
          {"mData": "category"},
          {"mData": "description"},
          {"mData": "image.data", "mRender": function ( data, type, full ) {
            return '<img src="data:image/png;base64,'+data+'", style="width: 20px; height: 20px"></>'}},
          {"mData": "promoted"},
          {"mData": null}
        ]

推荐答案

问题是val.image.data不提供base64字符串,而是提供缓冲区。所以,你必须先转换它。我是这样做的:

Product.findById('559f6e08b090ca5c5ce6942b', function(err, result) {
    if (err) throw (err);

    var thumb = new Buffer(result.image.data).toString('base64');
    res.render('index', { title: 'Express', img: thumb});
});

另外,您的前端Jade代码有一个小问题,应该是:

img(src="data:image/jpeg;base64,#{img}") //No + and ''

注意:对于小的缩略图或类似的内容,您可以不使用此方法,但由于多种原因(例如16MB的限制),不推荐使用此方法。您最好使用GridFS。有关详细信息,请访问http://docs.mongodb.org/manual/core/gridfs

这篇关于使用Mongo集合中的二进制数据作为图像源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆