2015-07-06 13 views
23

Görünüm motoru olarak Jade'i kullanarak, mongo'da verileri saklayan hızlı bir uygulamanız var. Belli bir koleksiyonda, her bir dokümanın bir ürüne karşılık gelen dokümanları içeren basit bir yol var. Resim base64 kodlu. Ben denemek ve onuResim kaynağı olarak Mongo koleksiyonundan ikili veri kullanma

çalışmıyor olsa bir görüntü olarak işlemek zaman benim rota

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); 
    }); 
}; 

ve sonra benim Yeşim dosyası aşağıdaki kodu vardır çağıran fonksiyondur

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

Doktora doğrudan Mongo'da (robomongo aracılığıyla) bakıyorum Bunu

elde ediyorum

enter image description here

enter image description here

başka dosyada ben belgeleri göstermek için jQuery datatables kullanmak çünkü ben eksik bilmiyorum ve aynı yaklaşım doğru görüntü vermektedir, burada olduğu veri kümesinin pasajı

"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} 
     ] 
+0

Verilere erişmek için: val.image.data. $ Binary? – Tony

+0

Evet, sadece “val.image.data. $ Binary'' undefined' –

+0

, arabellekten dönüştürülen base64 dizesinin bir örneğini gönderebilir misiniz? Resmi gösteremiyorum. –

cevap

13

Sorun val.image.data bir base64 dizesi değil bir arabellek sağlamaz. Yani, önce onu dönüştürmelisin. Bu benim işe gerçekleştirme şekli: En ön uç yeşim kod üzerinde küçük bir sorun var

Ayrıca
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}); 
}); 

, bu olmalıdır:

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

Not: küçük için bu kurtulabilirsin Küçük resimler veya benzerleri, ancak bir takım sebeplerden dolayı (16MB sınırı gibi) önerilen yaklaşım değildir. GridFS'yi kullanmaktan çok daha iyisin. Daha fazla bilgi için: http://docs.mongodb.org/manual/core/gridfs

+0

Merhaba Bunu, Typescript'te yapmaya çalışıyorum ama sonuç alamıyorum. const imageString = Buffer.from (doc [9] .images [0] .toString()) toString ("base64"); Bu da gösteriyor dizesi: 77 + 977 + 977 + 977 + 9ABBKRklGAAEBAQBIAEgAAO +/ve +/vRPvv71FeGlmAABNTQAqAAAACAAOAQAAAwAAAAEP77 + 9W ++/vQEBAAMAAAABC++/vVvvv70BAgADAAAAAwAACO +/vQEOAAIAAAAEbWRlAAEPAA IAAAAHAAAI77 + 9ARAAAgAAAAgAAAjvv70BEgADAAAAAQABAAABMQACAAAAEAAACO +/vQEyAAIAAAAUAAAI77 + 9AhMAAwAAAAEAAS1B77 + 9aQAEAAAAAQAACO +/ve +/ve +/vQABAAAACAAAE ++/ve +/ve +/ vQABAAAACAAAE ++/ve +/vRwABwAACAwAAADvv70AAAAAHO +/vQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAA –

İlgili konular