发送非公开文件作为回复附件(下载非公开文件)

我在HTML中有一个下载button,当点击一个POST请求时,通过ajax发送必须下载的文件的文件名。

在服务器端,我做了这样的事情:

function download (req, res) { ... // path is an absolute path to a file that is not in the public // directory. I want to download that file res.writeHead(200, { "Content-disposition": "attachment;filename=\"" + path + "\"", "Content-Type": "text/csv" }); var filestream = fs.createReadStream(path); filestream.pipe(res); }; 

我可以看到响应中的文件内容,但保存文件对话框不出现。

问题是哪个? 我怎样才能解决这个问题?

我只使用内置的节点模块,所以我不使用快递。

您不能强制浏览器显示“保存文件”对话框。

举个例子,在我的Mac上,Chrome和Safari都会自动下载文件(在Chrome中,这个设置是否显示对话框 – 我想 – 默认情况下是closures的;我不知道Safari是否有类似的设置),而FireFox确实给了我一个对话框。