获取 Base64 编码的图像并使用 ExpressJS 作为图像发送

use*_*205 5 html javascript image http node.js

我正在开发一个使用 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);
    });
});
Run Code Online (Sandbox Code Playgroud)

guidToImage 将图像作为缓冲区返回。

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

白盒

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

在此处输入图片说明

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

在此处输入图片说明

当我找到它时,图像显示为损坏:

在此处输入图片说明

我怎样才能实现我想要做的事情?

我已经花了 6 个小时试图让这个工作现在。

谢谢您的帮助。

use*_*205 5

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

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);
    });
});
Run Code Online (Sandbox Code Playgroud)