Javascript 以附件形式发送非公共文件作为响应(下载非公共文件)
我有一个HTML中的下载按钮,当点击时,一个POST请求通过ajax发送必须下载的文件名 在服务器端,我执行以下操作: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
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流?与内容类型一样:应用程序/八位字节流
。