前端下载文件,文件打不开的问题记录

需求:

下载是很常见的接口,但是经常存在下载的文件异常的问题。此处记录一个常见的错误。

分析:

1、接口请求需要配置{responseType: 'blob'},此时要求返回的格式为blob,进而进行下载。

javascript 复制代码
const res = await axios.post(apis.exportAlertInfos, params, { responseType: 'blob' })

2、若后端报错。此时后端返回的response的类型res.data.type是application/json,但是前端接收的数据res.data还是blob格式,(打开浏览器的接口控网络显示的其实是json的格式)。此时需要通过res.data?.text()对数据进行解析将blob文件流转为json格式。

javascript 复制代码
 if (res?.data?.type == 'application/json') {
     const err = await res.data?.text()
     const errObj = JSON.parse(err)
     loading.close()
     ElMessage.error(errObj?.message || '文件下载异常')
     return 
 }

3、 若后端返回的文件流正常,此时需要根据response的请求头的content-type进行数据处理。

javascript 复制代码
const fileName = res.headers['content-disposition'].split('=')[1]
const blob = new Blob([res.data], {
  type: res.headers['content-type']
})
// const blob = new Blob([res.data], {
//   type: "application/msexcel;charset=utf-8"
// })
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.setAttribute('download', decodeURI(fileName))
document.body.appendChild(link)
link.click()
window.URL.revokeObjectURL(url)
document.body.removeChild(link)
相关推荐
腻害兔9 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
奎叔9 小时前
Flutter 异常处理体系:从捕获、转换到恢复
前端
心念枕惊10 小时前
.NET CORE 授权进阶-角色、策略与动态权限实现
java·前端·.netcore
小徐_233310 小时前
寓言故事一则:狗猛酒酸
前端·ai编程
xiaobaoyu10 小时前
vue2+element开发中问题和解决方式
前端
KaMeidebaby10 小时前
卡梅德生物技术快报 | 核酸适配体文库测序:核酸适配体文库测序的技术原理、实验流程与数据解析
前端·网络·数据库·人工智能·算法
Hilaku11 小时前
为什么在 2026 年,MPA(多页面应用)正在悄悄复辟?
前端·javascript·程序员
幸福小宝11 小时前
eslint和prettier
前端
anyup11 小时前
终于在今天入选了 Gitee GVP,这真值得庆祝~
前端·uni-app·开源
幸福小宝11 小时前
husky和lint-staged
前端