使用Vue Admin Work中的封装的axios导出Excel文件乱码
解决方法:页面文件示例
post({ url: ExportGroup, data: () => { return { key: searchkey.value, pid: Number(pid), sort: sort.value, }; }, headers:{responseType: 'blob'} }) .then(({ data }: Response) => { // 创建一个Blob对象,用于创建文件 const blob = new Blob([data.filedata], { type: "application/vnd.ms-excel" }); // 创建一个链接元素 const link = document.createElement("a"); if (typeof link.download === "string") { // 兼容大多数浏览器的下载方式 link.href = URL.createObjectURL(blob); link.download = decodeURIComponent(data.filename); // 设置下载文件名 document.body.appendChild(link); link.click(); document.body.removeChild(link); } else { // 对于不支持下载属性的浏览器,直接打开对象URL window.open(URL.createObjectURL(blob)); } }) .catch((error) => { loading.value = false; message.error(error.message); });
axios.config.ts文件修改示例
service.interceptors.request.use( (config) => { !config.headers && (config.headers = {}) if (!config.headers[CONTENT_TYPE]) { config.headers[CONTENT_TYPE] = APPLICATION_JSON } config.headers[xsrfHeaderName] = Cookies.get(USER_TOKEN_KEY) || '' if (config.headers[CONTENT_TYPE] === FORM_URLENCODED) { config.data = qs.stringify(config.data) } if (config.headers["responseType"]) { config.responseType = config.headers["responseType"]; } return config }, (error) => { return Promise.reject(error.response) } )
关键是
if (config.headers["responseType"]) { config.responseType = config.headers["responseType"]; }