function downloadFile(url, fileName) {
let xmlHttp = null;
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlHttp = new XMLHttpRequest();
// 如果实例化成功,就调用open()方法:
if (xmlHttp !== null) {
xmlHttp.open('get', url, true);
xmlHttp.send();
xmlHttp.onreadystatechange = readyToDownload;
} else {
alert('当前浏览器不支持该操作');
}
// 准备下载
function readyToDownload() {
/**
* xmlHttp.readyState:
* 0 - (未初始化)还没有调用send()方法
* 1 - (载入)已调用send()方法,正在发送请求
* 2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
* 3 - (交互)正在解析响应内容
* 4 - (完成)响应内容解析完成,可以在客户端调用了
* */
if (xmlHttp.readyState !== 4) {
// 回调函数在每个状态都会被调用一次,因此在准备好之前,直接return,不处理就行
return;
}
if (xmlHttp.status !== 200) {
return alert('下载失败');
}
// 创建隐藏的可下载链接
var aLink = document.createElement('a');
aLink.download = fileName; //设置a标签的下载名字
aLink.style.display = 'none';
// 字符内容转变成blob地址
var blob = new Blob([xmlHttp.responseText]);
aLink.href = URL.createObjectURL(blob);
// 触发点击
document.body.appendChild(aLink);
aLink.click();
// 移除a标签
document.body.removeChild(aLink);
}
}