转换后的base64映像不起作用,如何获得真实的base64映像?

时间:2018-11-02 21:38:07

标签: node.js base64 buffer

我尝试将请求有效负载转换为base64,但是我的代码结果不是有效的base64映像。当我尝试在浏览器中使用它时,它不会显示图像。

所以我尝试编写简单的代码将图像转换为base64或使用npm模块,但是结果是相同的,并且我没有得到有效的图像!

const request = require('request');

const url = "http://cdn1.giltcdn.com/images/share/uploads/0000/0001/7250/172502872/420x560.jpg";

request({url, gzip: true}, function (err, res, body) {

    if(!err){
        const data = "data:" + res.headers["content-type"] + ";base64," + Buffer.from(body, 'binary').toString('base64');
        console.log(data);
    }
});

server.get("/test", function(req, res){
    const data = "data:" + req.headers["content-type"] + ";base64," + Buffer.from(req.data.payload, 'binary').toString('base64');
    console.log(data);
});

结果是相同的(当我在浏览器中复制和粘贴时,它不显示图像):

  

data:image / jpeg; base64,/ f39 / QAQSkZJRgABAQAAAQABAAD9 / QBDAAEBA ...

当我使用此https://www.base64-image.de/网站转换为base64图像时,结果是(当我在浏览器中复制和粘贴时,它可以工作并显示图像):

  

data:image / jpeg; base64,/ 9j / 4AAQSkZJRgABAQAAAQABAAD / 2wBDAAEBA ...

为什么结果不同?为什么不缓冲到base64上?

1 个答案:

答案 0 :(得分:1)

似乎您需要将encoding: null设置为request函数的选项,如this answer中所述。它强制将body作为二进制而不是默认的utf8返回。

const request = require('request');

const url = "http://cdn1.giltcdn.com/images/share/uploads/0000/0001/7250/172502872/420x560.jpg";

request({url, gzip: true, encoding: null}, function (err, res, body) {
    if(!err) {
        const data = "data:" + res.headers["content-type"] + ";base64," + Buffer.from(body, 'binary').toString('base64');
        console.log(data);
    }
});