axios接受文件流并下载

需求场景

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

注意事项

请求api需要添加:responseType:'blob' , axios拦截器拦截错误状态码 (假设是code) 那里的ifres.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 分钟前
css自制图书封面效果
前端·css
积硅步致千里9 分钟前
Fyne 兼容性:报错还能救,透明窗才要命
前端·后端
可乐鸡翅yeah_43 分钟前
hls.js 播放质量埋点实战,采集卡顿、起播、错误指标定位线上用户问题
开发语言·前端·javascript·ecmascript·音视频·m3u8·音视频在线播放
tedcloud1231 小时前
Wand-Enhancer:如何搭建一套远程开发与测试环境
前端·人工智能·macos·开源·流程图
掘金挖土1 小时前
前端手摸手跑路之 AI 应用开发(三)
前端·后端
计算机魔术师2 小时前
OpenAI 宣称破解千禧年难题,数学家却说是「反例搜索」?
前端
志尊宝2 小时前
Vue3 零基础每日笔记(015):条件渲染 v-if 与 v-show——控制 DOM 生死还是控制显隐
前端·vue.js·笔记
掘金者阿豪2 小时前
OceanBase 和金仓怎么选?别只看分布式,复杂查询更考验架构取舍
前端·后端·架构
Bug修理工Bubble2 小时前
Swift ARC:一个对象到底什么时候才会被释放?
前端
ClouGence2 小时前
GPT-6 做 UI 自动化测试:Demo 惊艳,但真的适合长期回归吗?
前端·chatgpt·测试