Express - Return 来自网络服务的二进制数据
Express - Return binary data from webservice
我尝试使用 Express return 一些二进制数据。在示例中,它是一个 PDF,但理论上,这可以是任何类型的文件。
但暂时关注 pdf。我写了这段代码:
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);
}
);
});
根据我在这里看到的内容:https://github.com/strongloop/express/issues/1555
但是,我得到了一个页数正确、标题正确的 pdf 文件....但是所有页面都是空白的
我肯定关心 getBinaryData() 的 return,因为这个函数请求外部 Web 服务,当我直接请求这个服务时,我得到了正确的文档。
提前感谢您的回答
我找到了一个更简单的解决方案:
request(req.url).pipe(res);
这会将来自远程 Web 服务的原始响应直接传送到我的响应!无论文件类型如何,我都得到了正确的文件。
这是我关于如何使用 Express return 二进制文件的稍微清理过的版本。我假设数据在一个对象中,该对象可以声明为二进制并且长度为:
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'));
};
我尝试使用 Express return 一些二进制数据。在示例中,它是一个 PDF,但理论上,这可以是任何类型的文件。
但暂时关注 pdf。我写了这段代码:
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);
}
);
});
根据我在这里看到的内容:https://github.com/strongloop/express/issues/1555
但是,我得到了一个页数正确、标题正确的 pdf 文件....但是所有页面都是空白的
我肯定关心 getBinaryData() 的 return,因为这个函数请求外部 Web 服务,当我直接请求这个服务时,我得到了正确的文档。
提前感谢您的回答
我找到了一个更简单的解决方案:
request(req.url).pipe(res);
这会将来自远程 Web 服务的原始响应直接传送到我的响应!无论文件类型如何,我都得到了正确的文件。
这是我关于如何使用 Express return 二进制文件的稍微清理过的版本。我假设数据在一个对象中,该对象可以声明为二进制并且长度为:
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'));
};