如何使用 NodeJS 下载 pdf 并将其发送到客户端?
Posted
技术标签:
【中文标题】如何使用 NodeJS 下载 pdf 并将其发送到客户端?【英文标题】:how to download pdf using NodeJS and send it to the client? 【发布时间】: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文件正确,下载后如何传输并在浏览器中查看 【参考方案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); );
【讨论】:
以上是关于如何使用 NodeJS 下载 pdf 并将其发送到客户端?的主要内容,如果未能解决你的问题,请参考以下文章
使用 React/Nodejs 通过电子邮件发送生成的 PDF 文件
如何在 zip 文件中生成 xls 文件并将其发送到电子邮件以在那里下载 - groovy [关闭]
NodeJS:从 JSON 中提取数据,修改对象并将其发送回同一个 JSON 文件