在我的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();
Run Code Online (Sandbox Code Playgroud)
我没有收到任何错误,但我也没有在浏览器中获取该文件.我究竟做错了什么?
has*_*sin 32
您必须从可读流管道传输到可写流,而不是相反:
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);
Run Code Online (Sandbox Code Playgroud)
此外,您正在以错误的方式设置编码,如果需要,传递带编码的对象.
Wen*_*ang 12
我想我在另一篇文章中使用节点js在显示PDF文件离子浏览器中找到了答案.
在Chrome中测试您的代码后,它会立即开始下载PDF文件.但是,如果您想显示PDF文件的内容,可以尝试以下方法:
var data =fs.readFileSync('./public/modules/datacollectors/output.pdf');
res.contentType("application/pdf");
res.send(data);
Run Code Online (Sandbox Code Playgroud)
这应该直接将PDF内容发送到浏览器.
希望这能回答你的问题.
这是最简单的方法:
app.get('/', (req, res) => res.download('./file.pdf'))
Run Code Online (Sandbox Code Playgroud)
如果这给你带来麻烦。检查 Express.js 版本或任何可能需要的中间件。
干杯