如何在不使用pipe()强制下载的情况下向客户端渲染和显示pdf

时间:2019-02-27 15:00:06

标签: node.js express

我正在执行一个API请求,该请求发送PDF文件作为响应,但是当访问该路由时,将立即强制下载该文件。我只想在客户端浏览器中显示PDF文件,而不下载它。

exports.print = (req,res) => {
    request("API").on('response', function(response) {
        res.set({
            'Content-Disposition': 'inline; filename=my.pdf',
            'Content-Type': 'application/pdf'
        });
    })
    .pipe(res);
}

2 个答案:

答案 0 :(得分:0)

检查https://gist.github.com/adamgibbons/af2de54c011e68a7b85a zishon89答案,它应该可以完成工作。

var express = require('express'),
        fs = require('fs'),
        app = express();
    app.get('/', function (req, res) {
        var filePath = "/files/my_pdf_file.pdf";

        fs.readFile(__dirname + filePath , function (err,data){
            res.contentType("application/pdf");
            res.send(data);
        });
    });

    app.listen(3000, function(){
        console.log('Listening on 3000');
    });

答案 1 :(得分:0)

我已经测试了以下代码,它在chrome浏览器中正常运行。请尝试以下代码一次。(请安装npm请求包。您也可以使用async并等待)

我从外部api获取了pdf,并将其存储在“ test.pdf”中,之后,我正在读取该pdf文件并将数据发送到浏览器。

exports.sendPDFFIle=(req,res)=>{
  request=require('request');
  const fs=require('fs');
  request('http://www.africau.edu/images/default/sample.pdf').pipe(fs.createWriteStream('../TestPdf/test.pdf'))

    var data = fs.readFileSync('../TestPdf/test.pdf');
    res.contentType("application/pdf");
    res.send(data);

};