在Express.js中使用res.download我的文件发生了什么?

时间:2014-08-10 00:30:32

标签: node.js pdf express

我正在处理在服务器上创建PDF文档的应用,然后显示Download Here按钮。单击按钮时,该过程似乎有效。当我在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);
};

预先感谢此处的任何指导。

1 个答案:

答案 0 :(得分:2)

不需要res.attachment() AND res.download()。只需使用后者。

此外,res.download()已经设置了Content-Disposition标题,因此您也可以将其删除。

您还可以简化路径生成:

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

虽然您可能应该清理file和/或检查thisPath是否不在某个位置。这样可以防止有人提供类似req.params.id的潜在恶意../../../../../../../etc/passwd值。