2016-11-07 114 views
3

我正在研究一個使用ExpressJS作爲Web服務器的Node.JS應用程序。以Base64編碼圖像並以ExpressJS作爲圖像發送

我想設置一條路徑/get/thumbnail/by_guid/:guid,它將圖像作爲實際圖像返回,而不是base64字符串,因此我可以使用<img src="/get/thumbnail/by_guid/ABCD" >設置圖像標記的來源,並顯示實際圖像。

我將縮略圖存儲爲數據庫中的BLOB並檢索它們。當我檢索它們時,它們在我的節點應用程序中成爲緩衝區。然後我發送這些緩衝區到我的路由中,如下所示,其中img是包含圖像的緩衝區對象。

router.get('/get/thumbnail/by_guid/:guid', function(req, res){ 
    image_helper.guidToImage(req.params.guid).then(function(img){ 
     res.set('Content-Type', 'image/jpeg'); 
     res.set('Content-Length', img.length); 
     res.end(img, 'latin1'); 
    }, function(err){ 
     res.err(err); 
    }); 
}); 

guidToImage將圖像作爲緩衝區返回。

當我去的,我知道在縮略圖描述的URL,例如,/get/thumbnail/by_guid/ABCD,我看到一個白色的盒子是這樣的:

White Box

當我看到在Chrome瀏覽器開發的網絡選項卡工具,要求是這樣的:

enter image description here

的反應只是表明我的base64字符串:

enter image description here

而且圖像顯示,當我採購它作爲破:

enter image description here

我如何能實現我想要做什麼?

我花了6個小時試圖現在就開始工作。

感謝您的幫助。

+0

如何在HTML中顯示圖像? – Jorg

+0

@Jorg跟我貼的一模一樣:'' – user2172205

+0

噢,對不起。如果源代碼爲base64,則需要指定:'src =「data:image/png; base64,[base64 code] ...' – Jorg

回答

2

更改路線以使二進制顯示正確。

router.get('/get/thumbnail/by_guid/:guid', function(req, res){ 
    image_helper.guidToImage(req.params.guid).then(function(img){ 
     var im = new Buffer(img.toString('binary'), 'base64'); 

     res.writeHead(200, { 
     'Content-Type': 'image/jpg', 
     'Content-Length': im.length 
     }); 
     res.end(im); 
    }, function(err){ 
     res.err(err); 
    }); 
});