关于解决点击文本链接浏览器会打开的问题(让其下载,而不是打开)

第四次是我成功的方案 其他只作为记录 (解决问题直接去看第四方案)

第一次尝试:

1
window.open(url)

这种情况遇见浏览器不能识别的会下载,浏览器能识别到的还会打开,比如text文本链接等。
第二次尝试:

1
window.location.href = url

这种用法和第一次效果相同
第三次尝试:

1
2
3
4
5
6
7
var a= document.createElement('a');
document.body.appendChild(a);
a.href = url;
a.download = filename;
a.click();
document.body.removeChild(a);

咳咳 想靠动态创建a标签来进行点击下载text文件 结果失败
第四次尝试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
downloadFile(url,fileName) {
var x = new XMLHttpRequest();
x.open("GET", url, true);
x.responseType = 'blob';
x.onload = function (e) {
var url = window.URL.createObjectURL(x.response)
var a = document.createElement('a');
a.href = url
a.download = fileName ;
a.click()
}
x.send();
this.$message.success('下载成功!')
}

哎!!这就可以了 url本身就是给api 创建个XMLHttpRequest对象请求后为Blob数据 对其再生成一个url 这样浏览器就不会再识别成打开text文件了

方案五(这个方案我没尝试,无意间看到的,本质和方案四差不多)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  axios({

url: `${Prefix}/xxx/xxx`,

method: 'post',

responseType: 'blob',

data: {},

}).then((result) => {

let filename = result.headers['content-disposition'] .split(';')[1].split('filename=')[1];

var blob = new Blob([result.data], {
type:
'application/vnd.openxmlformatsofficedocument.spreadsheetml.sheet;charset=utf-8',
}),
Temp = document.createElement('a');

Temp.href = window.URL.createObjectURL(blob);

Temp.download = window.decodeURI(filename);

document.body.appendChild(Temp);

Temp.click();

document.body.removeChild(Temp);

window.URL.revokeObjectURL(Temp);
});

关于解决点击文本链接浏览器会打开的问题(让其下载,而不是打开)
http://ultracode.cn/2021/11/30/NewVue2/关于解决点击文本链接浏览器会打开的问题(让其下载,而不是打开)/
作者
Win
发布于
2021年11月30日
许可协议