流程
创建 API 实例
const serviceApi = axios.create();
serviceApi.defaults.timeout = 5000;
serviceApi.defaults.retry = 4;
serviceApi.defaults.retryDelay = 5000;
serviceApi.defaults.baseURL = 'http://XXX.XXX.XXX';
请求拦截器
serviceApi.interceptors.request.use(
config => {
if (config.method == "post") {
} else if (config.method == "get") {
if (config.params.delItem == 'blob') {
console.log('进入判断--是 get 方法的导出');
config.responseType = 'blob';
delete config.params.delItem;
}
}
return config;
},
error => {
return Promise.reject(error);
}
);
封装下载方法
export function getDownloadFile(url, params = {}) {
params.delItem = 'blob';
return new Promise((resolve, reject) => {
serviceApi.get(url, {
params: params
})
.then(response => {
const blob = new Blob([response.data]);
blobToText(blob).then((result) => {
resolve(response);
}).catch((result) => {
reject(result);
})
})
.catch(err => {
reject(err);
});
});
}
export function postDownloadFile(url, data = {}, config = {
responseType: 'blob'
}) {
return new Promise((resolve, reject) => {
serviceApi.post(url, data, config)
.then(response => {
const blob = new Blob([response.data]);
blobToText(blob).then((result) => {
resolve(response);
}).catch((result) => {
reject(result);
})
})
.catch(err => {
reject(err);
});
});
}
export function blobToText(blob) {
return new Promise((resolve, reject) => {
const fileReader = new FileReader();
fileReader.readAsText(blob);
fileReader.onload = function () {
try {
const result = JSON.parse(this.result);
if (result && result.code == 200) {
resolve(result);
} else {
reject(result);
}
} catch (result) {
resolve(result);
}
}
})
}
调用下载方法
getDownloadFile(url, params).then(
(res) => {
const blob = new Blob([res.data]);
const fileName = "get方法下载的文件流.jpg";
if ("download" in document.createElement("a")) {
const elink = document.createElement("a");
elink.download = fileName;
elink.style.display = "none";
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href);
document.body.removeChild(elink);
} else {
navigator.msSaveBlob(blob, fileName);
}
},
(error) => {}
)
postDownloadFile(url, params).then(
(res) => {
const blob = new Blob([res.data]);
const fileName = "get方法下载的文件流.jpg";
if ("download" in document.createElement("a")) {
const elink = document.createElement("a");
elink.download = fileName;
elink.style.display = "none";
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href);
document.body.removeChild(elink);
} else {
navigator.msSaveBlob(blob, fileName);
}
},
(error) => {}
)