获取Base64编码图像并将ExpressJS作为图像发送

时间:2016-11-07 04:22:37

标签: javascript html node.js image http

我正在开发一个利用ExpressJS作为Web服务器的Node.JS应用程序。

我想设置一条路线/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将图像作为缓冲区返回。

当我转到我所知道的缩略图所描述的网址时,例如/get/thumbnail/by_guid/ABCD,我看到一个像这样的白框:

White Box

当我查看chrome dev工具的网络选项卡时,请求如下所示:

enter image description here

响应只显示我的base64字符串:

enter image description here

当我采购时,图像显示为破碎:

enter image description here

我如何实现我的目标?

我花了6个小时试图让它正常工作。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

更改路线以使二进制文件正确显示。

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