我正在使用loopback框架。 我正在尝试读取pdf文件并返回响应二进制数据,因为在前端我需要显示pdf文件。
var fs = require('fs');
module.exports = function(Pdf) {
Person.getPdf = function(msg, cb) {
fs.readFile('test.pdf', 'utf8', function(err, data) {
if (err) {
return console.log(err);
}
console.log(data);
cb(null, 'data');
});
}
Pdf.remoteMethod('getPdf', {
accepts : {
arg : 'msg',
type : 'string'
},
returns : {
arg : 'greeting',
type : 'string'
},
http : {
path : '/pdf/preview',
verb : 'post'
},
});
};
如何返回test.pdf的二进制数据
答案 0 :(得分:2)
试试这个:
文件:common / models / pdf.js
module.exports = function(Pdf) {
Pdf.review = function(res, callback) {
res.set('Content-Type','application/octet-stream');
res.set('Content-Disposition','attachment;filename=review.pdf');
res.set('Content-Transfer-Encoding','binary');
fs.readFile('test.pdf', 'binary', function(err, data) {
if(err) {
console.error(err);
}
res.send(data);
});
};
Pdf.remoteMethod('review',
{
accepts: []
returns: {},
http: {path: '/review', verb: 'get'}
});
}
答案 1 :(得分:0)
对于环回 3.x:
我发现 this answer 引用了环回 3.x 文档 here。在定义 getPdf
远程方法时,您需要将 returns
值调整为如下所示:
var fs = require('fs');
module.exports = function(Pdf) {
Pdf.getPdf = function(msg, cb) {
fs.readFile('test.pdf', 'utf8', function(err, data) {
if (err) {
return console.log(err);
}
console.log(data);
cb( null, string_data, 'application/octet-stream')
});
}
Pdf.remoteMethod('getPdf', {
accepts : {
arg : 'msg',
type : 'string'
},
returns : [
{"type": "string", "root": true}, //doesnt need key name
{"arg": "Content-Type", "type": "string", "http": { "target": "header" }},
],
http : {
path : '/pdf/preview',
verb : 'post'
},
});
};