場景:在日常開發(fā)中我們會遇到通過創(chuàng)建a標簽來下載文件,代碼如下:
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.onload = function() {
if(this.status==200){
var reader = new FileReader();
reader.readAsDataURL(xhr.response);
reader.onload = function(e){
const a = document.createElement('a');
a.download = '文件名.文件后綴';
a.href = e.target.result;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
};
}
};
xhr.send();
這個時候會在下載目錄里記錄下載的url,拿到這個url可以在任何地方下載,如果此時的文件有下載權(quán)限的話,為了解決這個問題,可以稍加修改
var xhr = new XMLHttpRequest();
xhr.open('GET',url, true);
xhr.responseType = 'blob'; // 需要將responseType值設(shè)置為'bolb'
xhr.setRequestHeader('token', token);
xhr.setRequestHeader('Secure-Token', hex_md5(secureToken));
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.onload = function() {
if(this.status==200){
reader.onload = function(e){
// window.URL.createObjectURL(new Blob([xhr.response]))
var url = window.URL.createObjectURL(new Blob([xhr.response]));
var a = document.createElement('a');
a.download = '文件名.文件后綴';
a.href = url;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
};
}
};
xhr.send();