Node.js Express-从webservice返回二进制数据
我尝试用Express返回一些二进制数据。在本例中,它是一个PDF文件,但理论上,它可以是任何类型的文件 但现在请关注pdf。我写了这段代码:Node.js Express-从webservice返回二进制数据,node.js,pdf,express,binary,Node.js,Pdf,Express,Binary,我尝试用Express返回一些二进制数据。在本例中,它是一个PDF文件,但理论上,它可以是任何类型的文件 但现在请关注pdf。我写了这段代码: app.get('*', function (req, res) { getBinaryData(req.url, function (answer) { res.type('pdf'); res.end(new Buffer(answer, 'binary'));
app.get('*', function (req, res) {
getBinaryData(req.url,
function (answer) {
res.type('pdf');
res.end(new Buffer(answer, 'binary'));
},
function (error) {
res.setHeader('Content-Type', 'text/plain');
return res.end(error);
}
);
});
根据我在这里看到的情况:
但是,我得到了一个有正确页数、正确标题的pdf文件。。。。但是所有的页面都是空白的
我肯定关心getBinaryData()的返回,因为这个函数询问了一个外部Web服务,当我直接询问这个服务时,我得到了正确的文档
提前感谢您的回答我找到了一个更简单的解决方案:
request(req.url).pipe(res);
这将原始响应从远程Web服务直接传输到我的响应!无论文件类型是什么,我都得到了正确的文件。这是我稍微整理过的关于如何使用Express返回二进制文件的版本。我假设数据位于可以声明为二进制的对象中,并且具有以下长度:
exports.download = function (data, filename, mimetype, res) {
res.writeHead(200, {
'Content-Type': mimetype,
'Content-disposition': 'attachment;filename=' + filename,
'Content-Length': data.length
});
res.end(Buffer.from(data, 'binary'));
};
为什么不使用
res.sendFile
方法?因为我没有该文件:我从另一个Web服务获取此二进制内容。最终,我可以创建一个临时文件并使用sendFile…我尝试了同样的方法,但它对我不起作用。request(req.url).pipe(res)的request lib驻留在哪个库中?轻微的输入错误。应该是:res.end(new Buffer(data),'binary')
请记住new Buffer()已弃用,并且存在安全问题。@realtebo您可以使用Buffer.from()-有关更多示例,请参阅Node.js文档。new Buffer()
已弃用,请改用Buffer.from()
为什么要使用Buffer.from,这不是为字符串保留的吗?你不需要使用Buffer.alloc吗?