我打算使用远程方法下载动态生成的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文件容器,但显示的是错误的文件:
请指出代码有什么问题以及如何纠正。 从此网址获得了直接评价:https://github.com/strongloop/loopback-swagger/issues/34
答案 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
来管理可下载的文件。
文件分组在所谓的容器中(基本上是一个具有单一层次结构的文件夹,而不是更多)。
如何完成:
container
的模型。storage
数据源,用作connector
loopback-component-storage
container
模型数据源storage
那就是它。您可以上传和下载容器中的文件。 使用容器,您可以将文件存储到本地文件系统,或稍后移至云解决方案。