如何从节点/快递应用程序发送PDF文件到浏览器

在我的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(); 

我没有得到任何错误,但我没有得到在我的浏览器中的文件。 我究竟做错了什么?

您必须从可读streampipe道写入可写入stream而不是其他方式:

 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); 

此外,你是以错误的方式设置编码,如果需要传递编码的对象。

我想我find了你的答案在另一篇文章显示PDF文件离子浏览器使用节点js 。

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

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

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

希望这回答你的问题。