背景
由于浏览器的特性.txt .pdf .json
等等文件放在a
标签的href
属性中会被浏览器直接打开,这时可以给a
添加download
属性强制下载,但是当执行 跨域下载 文件时download
属性就会失效。
解决办法
跨域会导致download
属性失效,使用xhr
下载方式。
export default function download(url, fileName) {const xhr = new XMLHttpRequest()xhr.open('GET', url, true)xhr.responseType = 'blob'xhr.onload = () => {const url = window.URL.createObjectURL(xhr.response)createAndRemove(url, fileName)}xhr.send()}function createAndRemove(url, fileName) {// 创建隐藏的可下载链接var eleLink = document.createElement('a');eleLink.download = fileName;eleLink.style.display = 'none';// 下载内容转变成blob地址eleLink.href = url;// 触发点击document.body.appendChild(eleLink);eleLink.click();// 然后移除document.body.removeChild(eleLink);}