使用javascript生成要下载的文件。如何使用';另存为';没有HTTP头的对话?
我正在使用此功能下载一个文件:使用javascript生成要下载的文件。如何使用';另存为';没有HTTP头的对话?,javascript,Javascript,我正在使用此功能下载一个文件: function download(fileName, data) { fileName = fileName.replace(/\s+/gi, '_').replace(/[^a-zA-Z0-9-.,_]/gi, ''); let blob = new Blob([data], {type: 'text/plain'}); if(window.navigator.msSaveOrOpenBlob){ window.navi
function download(fileName, data) {
fileName = fileName.replace(/\s+/gi, '_').replace(/[^a-zA-Z0-9-.,_]/gi, '');
let blob = new Blob([data], {type: 'text/plain'});
if(window.navigator.msSaveOrOpenBlob){
window.navigator.msSaveBlob(blob, fileName);
}else{
let elem = window.document.createElement('a');
elem.href = window.URL.createObjectURL(blob);
elem.download = fileName;
document.body.appendChild(elem);
elem.click();
document.body.removeChild(elem);
}
}
// Example usage
$('button').on('click', function(){
download("test.txt", "test");
});
它工作得非常好。但是,它似乎将文件直接下载到下载文件夹中。
我如何让它打开一个“另存为”对话框,这样用户就可以选择自己喜欢的下载位置
JSFiddle:
我以前看到过一些关于操作头的建议,比如设置Content Disposition
——但是,当您动态生成一个文件时,这是可能的吗?Afaik头是在HTTP主体之前发送的,但是当JS代码运行时,整个HTTP请求已经完成,并且文件由客户端本身生成
有没有一种方法可以在不使用http头的情况下执行此操作?下载位置由浏览器决定。也就是说,如果我是对的,您无法控制是否显示“另存为”对话框,因为这是客户端配置选项。实际上,
内容处置
头不是在请求头中发送的,而是在响应头中发送的。这意味着要使用这种技巧,您必须修改服务器代码,而不是网页上运行的javascript。