接收文件流并导出至excel以及对二进制文件流内容的校验
废话不说 上代码
const handleRightDownload = async () => { axios({ method: 'post', url: '/my/handleAndDownloadExcel', // 请求地址 这里写后端的地址,注意加上`/api`以确保最终的请求能被替换掉 ,/api表示server要替换的前缀 '/api' -> '' data: { fileid:my.id //额外参数 }, headers: { // 请求头 Authorization: `Bearer ${token}`, // 这里要加上token防止401无权限 'Content-Type': 'application/json;charset=utf-8' }, responseType: 'blob' // 表明返回服务器返回的数据类型,关键代码,不加则会返回json格式 }).then(async (res) => { console.log('res :>> ', res) console.log(' res.data :>> ', res.data) const blob = new Blob([res.data], { type: res.headers['content-type'] }) const reader = new FileReader() //此if语句为了判断返回的二进制对象是不是正常的文件流形式, 如果后端返回的是{code:-1,msg:`模板错误` }诸如此类则会在这里被捕获到,也就没必要走下去了 if (blob.type.indexOf('application/json') > -1) { reader.readAsText(blob) reader.onload = (e) => { let text = e.target.result if (typeof text == 'string') { var errInfo = JSON.parse(text) MessagePlugin.error({ content: errInfo.msg, duration: 2000 }) } } return } // 正常态,则开始本地下载流程 const newBlob = res.data reader.readAsDataURL(newBlob) // 转换为base64,可以直接放入a标签href reader.onload = function (e) { var a = document.createElement('a') // 转换完成,创建一个a标签用于下载 a.download = `${currentFileName.value}.xlsx` a.href = e.target.result document.body.appendChild(a) a.click() a.remove() } MessagePlugin.success(`文件:${currentFileName.value}.xlsx导出成功`) }) // }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构