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图像中的二进制文件,为什么要将换行符替换为文本文件?这些字节在图像中很重要。你是对的。我删除了正则表达式,但没有修复它。谢谢你的接球!