【问题标题】:Using Node, Express, EJS: How to Serve a PDF File使用 Node、Express、EJS:如何提供 PDF 文件
【发布时间】:2021-03-29 01:31:10
【问题描述】:

我认为这很简单,但我已经被困了一段时间了。我正在尝试创建一个在新选项卡中提供 PDF 文件的链接。理想情况下,PDF 将在新选项卡中打开(即不下载)。为清楚起见,我没有尝试将 HTML 转换为 PDF - 我已经创建并保存了 PDF。

作为参考,这就是我想要完成的。

This is sample text in my .ejs file. I want to open myPDF in a new tab.

我检查了thisthis 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);
});

谢谢。

【问题讨论】:

  • 请展示您的尝试
  • 很抱歉之前的帖子不包括我尝试过的内容。我试图避免一些不必要的复杂性。我更新了帖子并在此期间取得了一些进展。

标签: node.js express ejs


【解决方案1】:

我找到了我的问题的答案,在这里发布给其他人。

要下载 PDF,以下作品来自this 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);

由于不相关的路由问题,此代码之前对我不起作用。菜鸟的错误是痛苦的。

【讨论】:

    猜你喜欢
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 2017-03-02
    • 2018-02-19
    相关资源
    最近更新 更多