2014-03-04 49 views
7

我正嘗試使用NodeJS下載PDF文件,然後將其數據發送到客戶端以嵌入到頁面中。以下是我如何下載PDF文件:如何使用NodeJS下載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接收到的數據發送到客戶端?

EDIT 我找到了解決方案:

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); }); 
+0

客戶端,例如瀏覽器會要求用戶保存PDF或在瀏覽器中打開它,因爲您設置了正確的內容類型。我認爲你的慾望影響,或者沒有? – wayne

+0

這行不起作用,它給了我一個錯誤「responce.header(200,{'content-type':'application/pdf'});」和瀏覽器不告訴我,如果我想下載或顯示它.am我做錯了什麼? – user2422940

+0

該行應該是responce.header('content-type','application/pdf'); 沒有使用流這將工作的小文件,你的回調(null)的錯誤來自哪裏? – wayne

回答

5

我找到了解決方案:

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

我也面臨同樣的情況,下面的代碼幫助了我。

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

希望它有幫助。

相關問題