如何将Node / Express应用程序中的pdf文件发送到浏览器

时间:2015-06-28 23:26:14

标签: node.js express

在我的Node / Express应用程序中,我有以下代码,它假设从文件中读取PDF文档,并将其发送到浏览器:

var file = fs.createReadStream('./public/modules/datacollectors/output.pdf', 'binary');
var stat = fs.statSync('./public/modules/datacollectors/output.pdf');
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=quote.pdf');
res.pipe(file, 'binary');
res.end(); 

我没有收到任何错误,但我也没有在浏览器中获取该文件。 我做错了什么?

5 个答案:

答案 0 :(得分:28)

你必须从可读流传输到可写流而不是相反:

var file = fs.createReadStream('./public/modules/datacollectors/output.pdf');
var stat = fs.statSync('./public/modules/datacollectors/output.pdf');
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=quote.pdf');
file.pipe(res);

此外,您正在以错误的方式设置编码,如果需要,请传递带编码的对象。

答案 1 :(得分:7)

我想我在另一篇文章Display PDF file in a browser using node js中找到了你的答案。

在Chrome中测试代码后,会立即开始下载PDF文件。但是,如果您想显示PDF文件的内容,可以尝试以下方法:

var data =fs.readFileSync('./public/modules/datacollectors/output.pdf');
res.contentType("application/pdf");
res.send(data);

这应该直接将PDF内容发送到浏览器中。

希望这能回答你的问题。

答案 2 :(得分:3)

这是最简单的方法:

config.getboolean

如果这给您带来麻烦。检查Express.js版本或可能需要的任何中间件。

欢呼

答案 3 :(得分:1)

在REST API调用上下载PDF的最佳方式。

var path = require('path');     
var file = path.join(__dirname, 'file.pdf');    
res.download(file, function (err) {
       if (err) {
           console.log("Error");
           console.log(err);
       } else {
           console.log("Success");
       }    
});

答案 4 :(得分:0)

如果您正在使用Swagger / OpenAPI,则可以查看以下代码的“响应”部分。 *tmp*