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 },