当前位置: 首页 > backend >正文

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

需求:

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

分析:

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

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格式。

 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进行数据处理。

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)
http://www.xdnf.cn/news/10790.html

相关文章:

  • 【数据分析】第四章 pandas简介(2)
  • AI与区块链:数据确权与模型共享的未来
  • recipes中声明 DEPENDS += “virtual/kernel“ 的效果
  • 『uniapp』把接口的内容下载为txt本地保存 / 读取本地保存的txt文件内容(详细图文注释)
  • Qt开发:QThreadPool的介绍和使用
  • 如何合理设计缓存 Key的命名规范,以避免在共享 Redis 或跨服务场景下的冲突?
  • 【QT】在Qt6的`QTextEdit`中,同一行更新内容
  • 浅谈边缘计算
  • K8s基础一
  • QUIC——UDP实现可靠性传输
  • 数据结构:递归的种类(Types of Recursion)
  • 云计算 Linux Rocky day03
  • 电子电路:什么是晶振?
  • Java项目OOM排查
  • 云原生架构下的现代化应用治理:理念、挑战与实践路径
  • CSS 表单设计与实现技巧
  • Apache Iceberg 如何实现分布式 ACID 事务:深度解析大数据时代的可靠数据管理
  • Spring @Value注解的依赖注入实现原理
  • Unity——QFramework工具 AciontKit时序动作执行系统
  • React 第五十一节 Router中useOutletContext的使用详解及注意事项
  • Lua和JS的垃圾回收机制
  • Fuse.js:打造极致模糊搜索体验
  • 网络安全-等级保护(等保) 3-3 GB/T 36627-2018 《信息安全技术 网络安全等级保护测试评估技术指南》-2018-09-17发布【现行】
  • 湖北理元理律师事务所:系统性债务化解中的法律技术革新
  • 0518蚂蚁暑期实习上机考试题1:数组操作
  • 实现仿中国婚博会微信小程序
  • Redis缓存-数据淘汰策略
  • 工作服/反光衣检测算法AI智能分析网关V4安全作业风险预警方案:筑牢矿山/工地/工厂等多场景安全防线
  • Java基础之数组(附带Comparator)
  • Deepseek/cherry studio中的Latex公式复制到word中