//下載文件流函數,只支持get方法。
export function downBlob(payload) {
return new Promise(((resolve, reject) => {
// 獲取時間戳
let timestamp=new Date().getTime();
// 獲取XMLHttpRequest
let xmlResquest = new XMLHttpRequest();
// 發起請求
xmlResquest.open("GET", payload.url +"?"+ (payload.param), true);
// 設置請求頭類型
xmlResquest.setRequestHeader("Content-type", "application/json");
//返回類型為文件流
xmlResquest.responseType = "blob";
// 返回
xmlResquest.onload = function(oEvent) {
let content = xmlResquest.response;
//請求失敗
if(xmlResquest.status === 404){
message.error("文件不存在,請稍后再試");
return;
}
//請求失敗
if(xmlResquest.status != 200){
message.error("網絡錯誤,請稍后再試");
return;
}
//
let reader = new FileReader();
reader.onload = function(event){
//json成功表示服務器報錯,將錯誤信息提示出來
try {
let result = JSON.parse(reader.result);
message.error(result.errorMsg)
reject(result);
}catch (e) {
//json化失敗,表示是一個文件流,將文件流下載下來
// 組裝a標簽
if('msSaveOrOpenBlob' in navigator){
window.navigator.msSaveOrOpenBlob(blob, fileName);
return;
}
let elink = document.createElement("a");
// 設置下載文件名
elink.download = payload.fileName || timestamp + ".xlsx";
elink.style.display = "none";
let blob = new Blob([content]);
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
resolve();
}
};
reader.readAsText(content);
};
xmlResquest.send();
}));
}
或者
//文件地址 var url = '../aaa/bbb/模板.xlsx'; var xhr = new XMLHttpRequest(); xhr.open('get', url, true); xhr.responseType = "blob"; // 返回類型blob // 定義請求完成的處理函數,請求前也可以增加加載框/禁用下載按鈕邏輯 xhr.onload = function() { // 請求完成 if(this.status === 200) { // 返回200 var blob = this.response; var href = window.URL.createObjectURL(blob); //創建下載的鏈接 //判斷是否是IE瀏覽器,是的話返回true if (window.navigator.msSaveBlob) { try { window.navigator.msSaveBlob(blob, '模板.xlsx') } catch (e) { console.log(e); } } else { // 谷歌瀏覽器 創建a標簽 添加download屬性下載 var downloadElement = document.createElement('a'); downloadElement.href = href; downloadElement.target = '_blank'; downloadElement.download = '模板.xlsx'; //下載后文件名 document.body.appendChild(downloadElement); downloadElement.click(); //點擊下載 document.body.removeChild(downloadElement); //下載完成移除元素 window.URL.revokeObjectURL(href); //釋放掉blob對象 } } } // 發送ajax請求 xhr.send()