下载PDF nodejs + expressjs

时间:2019-01-08 14:16:07

标签: node.js express

我正在发出GET请求,以通过浏览器下载PDF文件,但没有得到回应。我不知道我要去哪里错了。遵循我的代码

我的控制器

download: function(req, res) {

        var nomeContrato = req.params.contrato;
        var cpfAluno = req.params.cpf

        db.query("select descricao from tparametro where valor = 'PATH'", function (err, rows) {

            if (err) {
                var message = err.message;
                console.log('Erro ' + message);

                return res.status(500).send(message);

            }else {

                var caminhoDiretorio = rows[0].descricao;
                var caminhoComSubdiretorio = caminhoDiretorio + path.sep + cpfAluno;
                var caminhoCompleto = caminhoComSubdiretorio + path.sep + nomeContrato;

                fs.readFile(caminhoCompleto, function(err, arquivo) {  
                    if (err) throw err;
                    //console.log('Arquivo:' + arquivo);
                    var data = [];
                    data.push(arquivo);
                    data = Buffer.concat(data);
                    //console.log('Arquivo:' + data);
                    res.writeHead(200, {
                        'Content-Type': 'application/pdf',
                        'Content-Disposition': 'attachment; filename=some_file.pdf',
                        'Content-Length': data.length
                      });
                      res.write(data);
                      res.end(data);
                });

            }

        });
    }

浏览器收到响应

enter image description here

响应头

enter image description here

2 个答案:

答案 0 :(得分:0)

使用'res.sendFile()更容易,例如:

   var filePath = "./dir/example.pdf"
   return res.sendFile(filePath);

答案 1 :(得分:0)

有没有您不能做的原因:

var caminhoDiretorio = rows[0].descricao;
var caminhoComSubdiretorio = caminhoDiretorio + path.sep + cpfAluno;
var caminhoCompleto = caminhoComSubdiretorio + path.sep + nomeContrato;

res.download(caminhoCompleto);