在我的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();
我没有收到任何错误,但我也没有在浏览器中获取该文件。 我做错了什么?
答案 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*