【问题标题】:how to download pdf using NodeJS and send it to the client?如何使用 NodeJS 下载 pdf 并将其发送到客户端?
【发布时间】:2014-04-05 23:05:09
【问题描述】:

我正在尝试使用 NodeJS 下载 PDF 文件,然后将其数据发送到客户端以嵌入到页面中。以下是我下载 PDF 文件的方法:

exports.sendPdf = function(req, responce) {
    var donneRecu = req.body;
    var url = 'http://www.ieee.org/documents/ieeecopyrightform.pdf'//pdf link
    http.get(url, function(res) {
        var data = '';
        res.on('data', function(chunk) {
            console.log('downloading');
            data += chunk;
        });
        res.on("end", function() {
            console.log('downloaded');
            responce.header("Access-Control-Allow-Origin", "*");
            responce.header("Access-Control-Allow-Headers", "X-Requested-With");
            responce.header(200, {'content-type' : 'application/pdf'});
            responce.send(data);
        });
    }).on("error", function() {
        callback(null);
    });
}

如何将从 NodeJS 接收到的数据发送到客户端?

编辑 我找到了解决方案:

exports.sendPdf = function(req, res) {

  var donneRecu = req.body;

  console.log(donneRecu['lien']);

  var url = donneRecu['lien']; //pdf link

  http.get(url, function(response) {

      var chunks = [];

      response.on('data', function(chunk) {

          console.log('downloading');

          chunks.push(chunk);

      });

      response.on("end", function() {
          console.log('downloaded');
          var jsfile = new Buffer.concat(chunks).toString('base64');
          console.log('converted to base64');
          res.header("Access-Control-Allow-Origin", "*");
          res.header("Access-Control-Allow-Headers", "X-Requested-With");
          res.header('content-type', 'application/pdf');
          res.send(jsfile);
      });
  }).on("error", function() {
      callback(null);
  }); 
}

在我的角度控制器中的下一个:

var pdf = $scope.base64ToUint8Array(data);    
PDFJS.getDocument(pdf).then(functiongetPdfHelloWorld(_pdfDoc) {
$scope.pdfDoc = _pdfDoc;$scope.renderPage($scope.pageNum); });

【问题讨论】:

  • 客户端(例如浏览器)会要求用户保存 pdf 或在浏览器中打开它,因为您设置了正确的内容类型。我认为你的欲望效应,还是没有?
  • 这条线不起作用它给我一个错误“responce.header(200, {'content-type': 'application/pdf'});”并且浏览器不告诉我是否要下载或显示它。我做错了吗??
  • 那一行应该是 responce.header('content-type','application/pdf');不使用流这将适用于小文件,你的回调(null)错误来自哪里?
  • 您需要隐藏您的pdf文件的实际网址吗?如果不是,您只需将您的客户端重定向到您的 pdf 网址而不代理请求。
  • 不,我不想隐藏我的网址。我使用此操作来避免交叉浏览问题。为了实现这一点,我使用 nodeJS 下载了一个 pdf 文件,然后我将它的数据传输到要查看的客户端。我面临的问题是我下载的方式是否pdf文件正确,下载后如何传输并在浏览器中查看

标签: javascript node.js pdf express


【解决方案1】:

我也遇到了同样的情况,下面的代码帮助了我。

var fs = require("fs");

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);

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我找到了解决方案:

    exports.sendPdf = function(req, res) {
    
      var donneRecu = req.body;
    
      console.log(donneRecu['lien']);
    
      var url = donneRecu['lien']; //pdf link
    
      http.get(url, function(response) {
    
          var chunks = [];
    
          response.on('data', function(chunk) {
    
              console.log('downloading');
    
              chunks.push(chunk);
    
          });
    
          response.on("end", function() {
              console.log('downloaded');
              var jsfile = new Buffer.concat(chunks).toString('base64');
              console.log('converted to base64');
              res.header("Access-Control-Allow-Origin", "*");
              res.header("Access-Control-Allow-Headers", "X-Requested-With");
              res.header('content-type', 'application/pdf');
              res.send(jsfile);
          });
      }).on("error", function() {
          callback(null);
      }); 
    }
    

    在我的角度控制器中的下一个:

    var pdf = $scope.base64ToUint8Array(data);    
    PDFJS.getDocument(pdf).then(functiongetPdfHelloWorld(_pdfDoc) {
    $scope.pdfDoc = _pdfDoc;$scope.renderPage($scope.pageNum); });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 2018-07-01
      相关资源
      最近更新 更多