如何使用原始数据将图像作为节点 HTTPS 响应发送



我正在我的节点HTTPS服务器中编写一个返回图像的路径。问题是我从另一个外部 API 调用中获取此图像(图像数据存在于 res.body 中(。此图像抓取基本上是返回图像的另一个 API 的代理。

我已经打印了对外部 API 的响应,并看到了图像数据。它还会在邮递员中打开图像,但是当我使用充当代理的 Node 服务器进行调用时,我要么得到失败响应,要么图片没有显示。我尝试中最常见的错误是邮递员尝试显示图像时的"解析错误"。

逻辑流程是我使用图像调用 API。如果响应是 200,我会获取该响应信息并将其设置为来自节点服务器的响应。代码如下:

function axisGetImage(command, webResponse){
var commandURL = config.CameraIP;
commandURL += '/GrabImage';
//console.log(commandURL);
const options = {
'auth': {
'user': username,
'pass': password,
'sendImmediately': false
}
}
console.log(commandURL);
request.get(commandURL, options, function(err, res, body){
if(res.statusCode == 200){
console.log(res.headers);
//webResponse.setHeader('content-type', res.headers['content-type']);
webResponse.setHeader('content-length', res.headers['content-length']);
webResponse.setHeader('cache-control', res.headers['cache-control']);
webResponse.setHeader('pragma', res.headers['pragma']);
webResponse.setHeader('connection', res.headers['connection']);
webResponse.writeHead(200,{"Content-Type":res.headers['content-type']});
var base64data = Buffer.from(res.body).toString('base64');
//body.write(res.body);
console.log(webResponse.headers);
//webResponse.write(base64data);
webResponse.end(base64data);
}else{
webResponse.end('Image pull failed');
}
console.log(res.statusCode);
});
}

已解决:为外部服务器的初始请求设置选项时,请指定请求中没有编码:

const options = {
'auth': {
'user': username,
'pass': password,
'sendImmediately': false
},
encoding: null
}

然后,您可以简单地将请求返回的正文(图像数据(直接写入节点服务器的响应,从而代理图像请求。

request.get(commandURL, options, function(err, res, body){
if(res.statusCode == 200){
webResponse.setHeader('content-length', res.headers['content-length']);
webResponse.setHeader('cache-control', res.headers['cache-control']);
webResponse.setHeader('pragma', res.headers['pragma']);
webResponse.setHeader('connection', res.headers['connection']);
webResponse.writeHead(200,{"Content-Type":res.headers['content-type']});
webResponse.end(body, 'binary');
}else{
webResponse.end('Image pull failed');
}
//console.log(res.statusCode);
});

最新更新