function downloadFile(url, filename) {
/**
* 原因是由于图片类文件无法直接下载
* 下载文件
* 原理:通过获取文件内容转译为二进制,传给创建a标签下载
* @param url 文件地址url
* @param filename 下载保存的名字
*/
var downloadFileBya = function (fileName, content) {
var aLink = document.createElement('a');
var blob = new Blob([content]);
var evt = document.createEvent("MouseEvents");
evt.initEvent("click", true, true);
if (fileName) {
aLink.download = fileName;
}
aLink.target = "_blank";
aLink.href = URL.createObjectURL(blob);
// 自定义触发事件
aLink.dispatchEvent(evt);
}
// 拿文件的名字
var fileNameFromHeader = function (disposition) {
if (disposition) {
// 正则取值'/'前面的数值
// 这里应该根据具体得的场景来取值
let index = disposition.lastIndexOf("/");
return decodeURIComponent(disposition.substring(index + 1, disposition.length));
}
return "undefine_file";
}
var xhr = new XMLHttpRequest();
xhr.withCredentials = false;
xhr.responseType = "blob";
xhr.open('GET', url, true);
xhr.onload = function () {
if (this.status == 200) {
// var blob = this.response;
var donwloadName = filename != undefined ? filename : fileNameFromHeader(xhr.responseURL);
downloadFileBya(donwloadName, xhr.response);
} else {
console.error("请求下载文件错误,请求错误码:" + this.status);
return false;
}
}
xhr.send();
}
如果是普通的文件本地需要下载直接调用window.open()这个方法
如果是文件上传(并且对参数有一定的要求要formData形式的,如下类似的操作即可)
1 // 导入Excel 2 onchangeSuccess(event) { 3 const file = event.target.files[0]; 4 console.log(file) 5 const formData = new FormData(); 6 formData.append("file", file); 7 const option = formData; 8 headPlayGetUpload(option, this.fileId).then( res =>{ 9 console.log(res, '导入Excel') 10 if (res.code == 200) { 11 this.$message({ 12 type:'success', 13 message:'导入成功' 14 }) 15 this.fileId = res.result.fileId; 16 } 17 }) 18 },