axios --- post请求json格式参数实现下载功能
首先在项目里install axios,然后设置axios默认条件,再挂载到vue 上 这样可以全局引用。这里直接具象描述怎么在页面里使用:
代码如下:
this.$axios({ url: '/dlServiceOrder/download', data: params, method: "post", contentType: "application/json;charset=utf-8", responseType: "blob", }).then(res=>{ download(res.data,'要导出的文件名'+formatDate(new Date())+'.xlsx') })
download方法为引入的公共方法如下:
export function download (data,titName) { if(!data){ return } const blob = new Blob([data],{type: "application/vnd.ms-excel"}) const fileName = titName?titName: '导入模板.xls' if ('download' in document.createElement('a')) { // 非IE下载 const elink = document.createElement('a') elink.download = fileName elink.style.display = 'none' elink.href = URL.createObjectURL(blob) document.body.appendChild(elink) elink.click() URL.revokeObjectURL(elink.href) // 释放URL 对象 document.body.removeChild(elink) } else { // IE10+下载 navigator.msSaveBlob(blob, fileName) navigator.msSaveBlob(blob) } }
通过响应头 content-disposition 获取后端接口定义的文件名
需要后端配合在响应头里定义下面两个属性 ,否则在响应头里无法获取到文件名
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition")
response.setHeader("Content-Disposition", ...)
在响应拦截里 增加下面代码逻辑
if (response.headers.has('content-disposition') && response.status === 200) { return response }
页面调用接口时 解析响应头中的fileName 并解码
exportGroupList(obj).then(res => { let temp = res.headers['content-disposition'].split(';')[1].split('filename=')[1] let fileName = decodeURIComponent(temp.replace(/"/g, '')) download(res.data, fileName) })
以上即可,我这里axios 封装具体参考我另一篇request封装。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)