使用远程方法下载pdf

时间:2016-10-03 12:24:31

标签: javascript node.js pdf loopbackjs strongloop

我打算使用远程方法下载动态生成的pdf文件,该文件存在于特定路径,我使用返回类型“file”。我的实现是:

customer.downloadFile = function downloadFile(userId, res, cb){
    var reader = fs.createReadStream(__dirname + '/../document.pdf');
    cb(null, reader, 'application/pdf');
};

customer.remoteMethod(
    'downloadFile',
    {
        isStatic: true,
        accepts: [
            { arg: 'id', type: 'string', required: true },
            { arg: 'res', type: 'object', 'http': { source: 'res' } }
        ],
        returns: [
            { arg: 'body', type: 'file', root: true },
            { arg: 'Content-Type', type: 'string', http: { target: 'header' } }
        ],
        http: {path: '/:id/downloadFile', verb: 'get'}
    }
);

上面代码的问题是浏览器虽然显示了漂亮的pdf文件容器,但显示的是错误的文件:

enter image description here

请指出代码有什么问题以及如何纠正。 从此网址获得了直接评价:https://github.com/strongloop/loopback-swagger/issues/34

2 个答案:

答案 0 :(得分:1)

使用以下内容:

fs.readFile(fileName, function (err, fileData) {
    res.contentType("application/pdf");
    res.status(200).send(fileData);

    if (!err) {
        fs.unlink(fileName);
    }
    else {
        cb(err);
    }
});

答案 1 :(得分:0)

您应该使用loopback-component-storage来管理可下载的文件。

文件分组在所谓的容器中(基本上是一个具有单一层次结构的文件夹,而不是更多)。

如何完成:

  1. 例如,创建一个名为container的模型。
  2. 创建一个storage数据源,用作connector loopback-component-storage
  3. 授予container模型数据源storage
  4. 那就是它。您可以上传和下载容器中的文件。 使用容器,您可以将文件存储到本地文件系统,或稍后移至云解决方案。