Express.js中的res.download文件中发生了什么?

我正在创build一个在服务器上创buildPDF文档的应用程序,然后显示一个“ Download Herebutton。 当我点击button,过程似乎工作。 当我检查Chrome控制台中的networking>预览和networking>标题标签时,我可以看到该文件已经返回。

问题是,它不显示,也不提供保存选项。 我错过了客户端的一步吗? 我的首选结果是让用户select保存文件或自动开始下载到他们的默认path。

这里是相关的服务器代码:

 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标题,所以你也可以删除它。

你也可以简化你的path生成:

 var thisPath = path.resolve(__dirname, '../../../lib/completedforms/', file); 

尽pipe你可能应该清理file和/或检查这个thisPath不是一些不应该在的位置。 这将防止某人提供像../../../../../../../etc/passwd这样的潜在恶意的req.params.id值。