Blob下载
优点:
下载异常时可控,即异常时可提示
缺点:
只适用较小文件
/**
* 保存流文件
* @param data 流数据
* @param fileName 文件名
* @type 将会被放入到blob中的内容(data)的MIME类型
*/
downloadByBlob(data, fileName, type) {
let blobObj, adom, url, event;
if (data) {
//Blob中第一个参数:由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array
blobObj = new Blob([data], {type: type});
if (window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blobObj, fileName);
} else {
adom = document.createElement('a');
event = document.createEvent('MouseEvents');
url = this.getObjectURL(blobObj);
document.body.appendChild(adom);
adom.style.display = 'none';
adom.href = url;
adom.download = fileName;
adom.target = '_blank';
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
adom.dispatchEvent(event);
adom.remove();
//用来释放一个之前已经存在的、通过调用 URL.createObjectURL() 创建的 URL 对象,即进行垃圾清理
URL.revokeObjectURL(url);
}
}
}
a标签下载
优点:
下载异常情况不可控
缺点:
文件大小任意
<a @click="downloadFile" :href= baseURL>下载</a>
this.baseURL = serviceApi.exportForwardTemp.url + '?token=' + sessionStorage.getItem('token');
通过Form表单下载
downLoadBackupFile() {
let token = sessionStorage.getItem('token'),
url = this.baseUrl = serviceApi.downLoadBackupFile.url + '?token=' + sessionStorage.getItem('token');
try {
let form = document.createElement('form');
let input = document.createElement('input');
input.type = 'hidden';
input.name = 'token';
input.value = token;
form.appendChild(input);
form.style = 'display:none';
form.method = 'get';
form.action = url;
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
} catch (e) {
document.body.removeChild(form);
this.$toast.error('网络或服务器异常,请稍后重试');
}
}