axios接受文件流并下载

需求场景

前端发送请求,后端传回文件流,前端接受到后立刻打开下载窗口下载文件

注意事项

请求api需要添加:responseType:'blob' , axios拦截器拦截错误状态码 (假设是code) 那里的if从res.code != 200改为res.code && res.code != 你们约定的成功状态码

如果不添加responseType:'blob' ,那么无法解析响应数据, 会出现乱码

这是解析后的响应信息,我们下载文件需要用到data里的数据

请求API封装

js 复制代码
import request from '@/utils/request'

export function downloadExcel(semesterId){
  return request({
    url: '你的请求接口',
    method: 'GET',
    params:{
      semesterId
    },
    responseType:'blob'  // 重点
  })
}

接收响应数据并下载

以我获取excel文件并下载为例

总体思路都是: 获取url、创建<a>标签,设置href,触发其click事件,完成下载,移除<a>标签

js 复制代码
            downloadExcel(this.semesterId)
            .then(data => {
            	// 我这里在拦截器里直接返回的response.data
                if(!data){
                    this.$message.error('获取Excel文件失败')
                    return;
                }

                let fileUrl = window.URL.createObjectURL(new Blob([data]))
                let a = document.createElement('a')
                a.style.display = "none"
                a.href = fileUrl
                a.setAttribute('download', `${this.semesterName}积分排行榜.xlsx`) // 注意文件后缀
                document.body.appendChild(a)
                a.click()
                window.URL.revokeObjectURL(a.href)
                document.body.removeChild(a)
            }).catch ((e) => {
                console.log("文件下载出错: ", e)
             }) 
相关推荐
再吃一根胡萝卜4 分钟前
不改一行官方源码:用一个插件把 DeepSeek Harness 换成「平安one」
前端
西安小哥7 分钟前
做 Agent 写到第三个小时,我开始给它算账
javascript
西安小哥16 分钟前
让大模型操作浏览器跑了两周,我发现瓶颈根本不在模型
javascript
涛涛ing19 分钟前
2026年,你选的不再是框架,是渲染模型
前端
AiMan24 分钟前
Perplexity还是不可导出左侧所有对话,只能单条内容,方法不对吗
前端
FungLeo29 分钟前
成为全栈·Vue 管理后台篇·Vue Query:服务端数据缓存、query key与变更失效
vue.js·数据获取·前端缓存·前端状态管理·tanstack query·vue query
用户2986985301430 分钟前
用 Python 自动化把 JavaScript 代码转换为 Word 文档
javascript·python·api
学以智用35 分钟前
正则表达式完整参考手册(JavaScript 版,兼容绝大多数语言)
javascript
AiMan41 分钟前
千问生成的内容能否下载吗?
前端
北城笑笑41 分钟前
Vue 109 ,从零搭建 Vue3 + Electron 工程:生态、安全桥接与打包选型( Vue + Electron )
前端·javascript·vue.js·安全·electron·vue