Node.js Express.js中res.download的文件发生了什么变化?
我正在开发一个应用程序,它在服务器上创建一个PDF文档,然后显示一个Node.js Express.js中res.download的文件发生了什么变化?,node.js,pdf,express,Node.js,Pdf,Express,我正在开发一个应用程序,它在服务器上创建一个PDF文档,然后显示一个下载按钮。当我单击该按钮时,该过程似乎有效。当我检查Chrome控制台中的“网络>预览”和“网络>标题”选项卡时,我可以看到文件肯定已返回 问题是,它不显示,也不提供保存选项。我是否错过了客户端步骤?我的首选结果是要么给用户保存文件的选项,要么自动开始下载到他们的默认路径 以下是相关的服务器代码: exports.show = function(req, res) { var file = req.params.id; va
下载按钮。当我单击该按钮时,该过程似乎有效。当我检查Chrome控制台中的“网络>预览”和“网络>标题”选项卡时,我可以看到文件肯定已返回
问题是,它不显示,也不提供保存选项。我是否错过了客户端步骤?我的首选结果是要么给用户保存文件的选项,要么自动开始下载到他们的默认路径
以下是相关的服务器代码:
exports.show = function(req, res) {
var file = req.params.id;
var filePath = __dirname + '../../../lib/completedforms/';
var thisPath = path.resolve(filePath + file);
res.attachment(thisPath);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader("Content-Disposition", "attachment");
res.download(thisPath);
};
提前感谢您的指导。无需同时使用res.attachment()
和res.download()
。就用后者吧
另外,res.download()
已经设置了Content Disposition
标题,因此您也可以删除该标题
您还可以简化路径生成:
var thisPath = path.resolve(__dirname, '../../../lib/completedforms/', file);
尽管您可能应该清理文件
和/或检查此路径
不是不应该在的位置。这将防止有人提供潜在恶意的req.params.id
值,如。/../../../../../../../../../etc/passwd
,谢谢mscdex,该代码现在干净多了。我仍然没有得到下载的提示。我认为这就是res.download()
方法的全部要点。我可以将返回值写入页面,它肯定是经过编码的PDF文件。我以为浏览器会识别格式,但显然不是这样。@mscdex@espressoAndCode我也在试图让浏览器提示下载。在我的例子中,res.download()
正在成功下载文件,但它正在下载到我默认的任何目录,并立即打开文件。有没有办法避免打开文件?