一、文件上传
import { importData } from '@/api.js';async importFn() {// 文件数据let file = null; // 文件使用form-data格式,参数使用json格式let formData = new FormData();formData.append("excel", file);formData.append("excelQuery", new Blob([JSON.stringify({name: '文件名'})], { type: 'application/json' }));// 调用接口需要定义headerslet res = await importData(formData, {headers: {'Content-Type': 'multipart/form-data'}});
}
传到接口的参数使用json格式,不然接口可能报415状态码错误
二、文件下载
import { exportData } from '@/api.js';async exportFn() {try {let res = await exportData({keyword: ''}, {headers: {'responseType': 'blob','Content-Type': 'application/json;application/octet-stream','dataType': 'json'} });let reader = new FileReader();reader.onload = (e) => {let content = reader.result;// 读取内容判断是返回的json 还是 文件数据if (content && content.indexOf('"code":') > -1) {let data = JSON.parse(content);console.error(data.msg);} else {this.exportZip(res, `${this.getTimeStr()}.zip`);}};reader.readAsText(res);} catch (err) {console.error(err);} finally {}
},
// 下载zip
exportZip(data, name) {let blob = new Blob([data], { type: 'application/zip' });let downloadElement = document.createElement('a');let href = window.URL.createObjectURL(blob); //创建下载的链接downloadElement.href = href;downloadElement.download = name; //定义文件名document.body.appendChild(downloadElement);downloadElement.click(); //点击下载document.body.removeChild(downloadElement); //下载完成移除元素window.URL.revokeObjectURL(href); //释放掉blob对象
},
// 获取时间作为文件名
getTimeStr() {const now = new Date();const year = now.getFullYear();const month = ('0' + (now.getMonth() + 1)).slice(-2);const day = ('0' + now.getDate()).slice(-2);const hours = ('0' + now.getHours()).slice(-2);const minutes = ('0' + now.getMinutes()).slice(-2);const seconds = ('0' + now.getSeconds()).slice(-2);const formattedTime = year + month + day + hours + minutes + seconds;return formattedTime;
},