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

Send non-public file as attachment in response (download non-public file)

本文关键字:文件 下载 响应      更新时间:2023-09-26

我在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。

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

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