node.js - 使用 Node、Express、EJS:如何提供 PDF 文件
问题描述
我认为这很简单,但我已经被困了一段时间了。我正在尝试创建一个在新选项卡中提供 PDF 文件的链接。理想情况下,PDF 将在新选项卡中打开(即不下载)。为清楚起见,我没有尝试将 HTML 转换为 PDF - 我已经创建并保存了 PDF。
作为参考,这就是我想要完成的。
This is sample text in my .ejs file. I want to open myPDF in a new tab.
我检查了这个和这个SO 帖子,但这对我不起作用。让我失望的部分是通过链接提供 PDF 文件。
更新
我在这里添加更多细节。在此期间,我取得了一些进展。
当用户转到指定的 URL 时,我可以下载 PDF。但是,如何让 PDF 在新选项卡中打开,而不是自动下载?
这是我正在使用的代码:
router.get('/test', (req, res) => {
//res.send('success');
console.log(__dirname);
var file = fs.createReadStream('./public/Literature/table1.pdf');
var stat = fs.statSync('./public/Literature/table1.pdf');
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=table1.pdf');
file.pipe(res);
});
谢谢。
解决方案
我找到了我的问题的答案,在这里发布给其他人。
要下载 PDF,请从这个SO 帖子中提取以下作品。
var file = fs.createReadStream('./public/Literature/table1.pdf');
var stat = fs.statSync('./public/Literature/table1.pdf');
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=table1.pdf');
file.pipe(res);
要在新选项卡中打开 PDF,第二个答案适用于同一个 SO 帖子。
var data = fs.readFileSync('./public/Literature/table1.pdf');
res.contentType('application/pdf');
res.send(data);
由于不相关的路由问题,此代码之前对我不起作用。菜鸟的错误是痛苦的。
推荐阅读
- python - 从 Cloud Run 下载公共 URL 时,Firebase 存储返回 503 和空响应
- reactjs - 如何配置两个单独的单选按钮/复选框
- git - 修复 Github repo 编辑和本地 repo 的问题
- powershell - 检查驱动器号映射并仅在不匹配时替换它(Powershell)
- flutter - Flutter 视频压缩 MediaInfo 类
- r - R plotly文本悬停框位置
- python - 如何正确地将熊猫时间增量添加到熊猫日期时间?
- reactjs - 我想生成一个图表作为基于 json 的层次结构反应
- anylogic - 通过变量更新触发 Anylogic 事件
- google-apps-script - Google表格上getRange中的变量