发送非公共文件作为响应中的附件(下载非公共文件)

时间:2013-10-16 13:19:42

标签: javascript node.js

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

在服务器端,我做了类似的事情:

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);
};

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

问题是什么?我该如何解决这个问题?

我只使用内置节点模块,所以我不使用express。

1 个答案:

答案 0 :(得分:1)

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

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