节点环回+ API响应返回二进制数据

时间:2016-03-17 11:54:52

标签: node.js api pdf loopbackjs strongloop

我正在使用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的二进制数据

2 个答案:

答案 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'
        },
    });
};