Javascript 以附件形式发送非公共文件作为响应(下载非公共文件)

Javascript 以附件形式发送非公共文件作为响应(下载非公共文件),javascript,node.js,Javascript,Node.js,我有一个HTML中的下载按钮,当点击时,一个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, { "C

我有一个HTML中的下载按钮,当点击时,一个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);
};
我可以在响应中看到文件内容,但未显示“保存文件”对话框

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


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

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


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

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


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

我用这段代码测试:@Johnツ 听起来在你的生活中还有另外一个问题code@Johnツ 哦,对了,我错过了。在这种情况下,这将变得更加困难,因为AJAX请求无法触发下载AFAIK(不过,请参阅一些技巧),使用表单方法可以很好地工作:
$(“”)…
,追加输入,然后提交。请将此内容添加到您的答案中进行投票并标记!:-)谢谢@约翰ツ 我不想为其他人的解决方案争光:)我用这段代码测试:@Johnツ 听起来在你的生活中还有另外一个问题code@Johnツ 哦,对了,我错过了。在这种情况下,这将变得更加困难,因为AJAX请求无法触发下载AFAIK(不过,请参阅一些技巧),使用表单方法可以很好地工作:
$(“”)…
,追加输入,然后提交。请将此内容添加到您的答案中进行投票并标记!:-)谢谢@约翰ツ 我不想把别人的解决方案归功于我:)也许把mime类型设置为八位字节流?与
内容类型一样:应用程序/octet流
。是否可以将mime类型设置为octet流?与
内容类型一样:应用程序/八位字节流