Javascript 节点中的toString(';base64';)返回无效的图像数据

Javascript 节点中的toString(';base64';)返回无效的图像数据,javascript,node.js,Javascript,Node.js,我目前有一个网站,我向服务器发送GET请求,希望它从网站下载图像并将数据发送回客户端。如果我将下载的结果数据直接写入一个文件中,它就会工作 app.get('/image', function(req, res) { request("http://ipcam/auto.jpg", {encoding: 'binary'}, function(err, response, body) { if (err) res.send(err); fs.wri

我目前有一个网站,我向服务器发送
GET
请求,希望它从网站下载图像并将数据发送回客户端。如果我将下载的结果数据直接写入一个文件中,它就会工作

    app.get('/image', function(req, res) {
    request("http://ipcam/auto.jpg", {encoding: 'binary'}, function(err, response, body) {
        if (err) res.send(err);
        fs.writeFile('logo ' + (Math.random() * 1000).toFixed(0) + '.jpeg', body, 'binary', function(err){
        if (err) throw err
             console.log('File saved.')
         })
        res.send(200);
    });
});
但是,当我尝试使用
缓冲区
对象将其转换为base64,然后将其发送到客户端时,
img
标记无法将其识别为有效的图像数据。这是通过显示base64图像数据预览的在线实用程序确认的

服务器:

res.send(new Buffer(body.replace(/(\r\n|\n|\r)/gm,""), 'binary').toString('base64'));
客户:

var xmlHttp = new XMLHttpRequest();
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200 && xmlHttp.responseText != undefined) {
                var base64string = xmlHttp.responseText.replace(/(\r\n|\n|\r)/gm,"");
                document.getElementById('image').src = 'data:image/jpeg;base64,' + base64string;
            }
        };
        xmlHttp.open("GET", '/image', true);
        xmlHttp.send();
编辑:如前所述,我删除了删除换行符的正则表达式。然而,这没有帮助

当前服务器:

res.send(new Buffer(body, 'binary').toString('base64'));
当前客户:

var xmlHttp = new XMLHttpRequest();
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200 && xmlHttp.responseText != undefined) {
                document.getElementById('image').src = 'data:image/jpeg;base64,' + xmlHttp.responseText;
            }
        };
        xmlHttp.open("GET", '/image', true);
        xmlHttp.send();
线路

res.send(new Buffer(body.replace(/(\r\n|\n|\r)/gm,""), 'binary').toString('base64'));
没有多大意义,您发送的不是二进制文件,而是字符串。所以试试看

res.send(new Buffer(body).toString('base64'));
{编码:'二进制'}

AFAIK如果希望请求将响应解释为二进制数据,则应该指定encoding:null

(引述)

编码-用于响应数据setEncoding的编码。如果为空, 主体作为缓冲区返回。其他任何内容(包括默认值) 值(未定义)将作为编码参数传递给toString() (这意味着默认情况下这实际上是utf8)。(注意:如果您希望使用二进制 数据,则应将编码设置为空。)

一旦这样做,您在响应中获得的主体将被设置为缓冲区,因此您可以直接执行以下操作:

body.toString('base64')

不幸的是,这没有起作用。生成的字符串看起来与base64中的其他图像完全不同,仍然没有在客户端生成有效的图像。我看到了编辑。即使换行符在转换之前保持不变,生成的数据也不会创建有效的图像。链接到您的图像/数据,否则这只是猜测。对于“服务器”,如果
正文
表示JPEG图像中的二进制文件,为什么要将换行符替换为文本文件?这些字节在图像中很重要。你是对的。我删除了正则表达式,但没有修复它。谢谢你的接球!