這是ajax部分,因?yàn)椴惶私饽壳绊?xiàng)目里的ajax存皂,所以就自己寫(xiě)了一個(gè)
export function downloadWebProtect (params, config = {}) {
?return new Promise((resolve, reject) => {
? ?try {
? ? ? const xhr = new XMLHttpRequest();
? ? ? xhr.onprogress = config.progress;
? ? ? xhr.open('GET', `${process.env.PROXY_ENV === 'dev' ? '/api' : ''}/${pkg.name}/download.json?${stringify({...params, ctoken: getCtoken() })}`, true);
? ? ? xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
? ? ? xhr.setRequestHeader('Accept', 'application/json');
? ? ? xhr.responseType = "blob"; //接收二進(jìn)制流數(shù)據(jù)
? ? ?xhr.onreadystatechange = () => {
? ? ? ?if (xhr.readyState === 4) {
? ? ? ? ? if (400 >= xhr.status && xhr.status? >= 200) {
? ? ? ? ? ? resolve(xhr.response);
? ? ? ? ? } else {
? ? ? ? ? ? reject(xhr.responseText)
? ? ? ? ? }
? ? ? ?}
? ? ? }
? ? ? xhr.onerror = (err) => {
? ? ? ? reject(err)
? ? ? }
? ? ? xhr.send();
? ?} catch (e) {
? ? ?console.log(e);
? ? }
? })
}
調(diào)用ajax的函數(shù):
handleConfirmDownload = () => {
? ?const progress = (event) => {
? ? ? const {total, loaded} = event;
? ? ? ?loaded/total; //當(dāng)前進(jìn)度
? ? };
? ? downloadWebProtect({}, {?progress }).then((res) => {
? ? ?????const url = window.URL.createObjectURL(res),//將二進(jìn)制流轉(zhuǎn)為內(nèi)存地址
? ? ? ? ? ? ? ? ? ?a = document.createElement('a');????
? ? ? ? ? a.href = url;
? ? ? ? ?a.download = `文件名稱(chēng).txt`;
? ? ? ? ?document.body.appendChild(a);
? ? ? ? ?a.click();
? ?}).catch((err) => {
? ? ? console.log('下載失敗');
? ? })
? }