前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案

这篇具有很好参考价值的文章主要介绍了前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景还原

我在前端使用axios接收后端xlsx表格文件流并下载,xlsx文件能够下载成功,但是打开却显示文件无法打开
前端下载文件无法打开,项目笔记,前端

相关代码

请求API封装:Content–Type以及responseType经核对均没有问题

export function downloadStudent(courseId, data) {
  return request({
    url: `/curriculum/course/download/${courseId}`,
    method: 'POST',
    data,
     headers: {
      'Content-Type': "application/json"
    }, 
    responseType: 'blob'
  })
}

接口调用:
前端下载文件无法打开,项目笔记,前端

下载函数封装:

/**
 * 下载处理器
 * @param name 文件名称
 * @param data 数据
 */
export const handleDownload = (name, data) => {
  const fileUrl = window.URL.createObjectURL(new Blob([data]))
  const a = document.createElement('a')
  a.style.display = 'none'
  a.href = fileUrl
  a.setAttribute('download', name)
  document.body.appendChild(a)
  a.click()
  window.URL.revokeObjectURL(a.href)
  document.body.removeChild(a)
}

开发者工具 - 网络请求记录

预览:二进制数据
前端下载文件无法打开,项目笔记,前端

问题排查

定位

可以看到文件数据已经接收到并且是二进制的,但是转为的xlsx文件却无法打开,所以我打印了一下数据想看下数据是否有问题
前端下载文件无法打开,项目笔记,前端
然后两眼一黑, undefined
前端下载文件无法打开,项目笔记,前端
这意味着我解构拿出来的data是未定义的,也就是说,在axios封装时候,响应拦截器里我经过一一系列处理,最后在code==200时会抛出resolve(response.data),我与后端约定的这个响应数据的格式是这样:

{
	"code": 200,
	"data": xxxx,
	"success": "success",
	"success": true
}

那么解构出来显示data undefined,就意味着这个接收文件流的接口返回的响应数据格式很可能不是上面的格式。需要看一看response.data

改bug

既然解构拿出来没有那就不解构了,去响应拦截器里打印原始response看看
前端下载文件无法打开,项目笔记,前端
type是Blob没有问题,但是从response可以看到,data格式变了,response.data已经是解析后的Blob对象, 里面自然没有我们想要解构拿到的data,所以在最开始的接口API调用里不可以解构拿data,直接拿响应拦截器里resolve出的response.data用就行

前端下载文件无法打开,项目笔记,前端
前端下载文件无法打开,项目笔记,前端
现在下载的xlsx文件已经可以正常打开了
前端下载文件无法打开,项目笔记,前端

总结

是一次粗心大意,习惯性地直接解构拿出需要的数据,但忽略了接口文档里这个接口的响应示例说明(虽然说这个接口的响应示例说明里也啥都没写,但相比其他的接口,确实啥都没写也算是一种特别说明)

所以,更高效的解决方式就是 -->文章来源地址https://www.toymoban.com/news/detail-761063.html

去看文档

到了这里,关于前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 后端返回可下载的xlsx文件,但是前端接收下载后为乱码

    我的接收数据进行处理的代码为: 确实可以下载下来,但是打开后为乱码。 解决办法: 后端传的是blob类型文件,所以前端接收时也要限制一下类型, 接收的请求代码配置为: 之后再下载就可以正确显示啦

    2024年02月12日
    浏览(52)
  • vue2文件流下载成功后文件格式错误、打不开、内容缺失

    后端采用文件流的方式将文件信息发送给前端,前端需要接收相应的流信息做出对应的操作,如接收到图片、pdf将进行预览模式,将接收到压缩包形式的则进行文件下载。后端对相应的文件进行不同的传输方式进行传输,前端则需要接收相应的信息并进行操作。 当收到图片、

    2023年04月27日
    浏览(40)
  • 解决axios请求文件流前端通过new Blob完成文件流下载文件打不开

    目录 1.首先请求封装axios的请求方式 2.根据接口文档查看文件流的请求类型 3.请求Methods 4.以上写完以后,好消息是文件可以成功下载 4.1坏消息是文件竟然是个损坏文件打不开,修复了也是乱码 5.解决问题 5.1 前端做文件下载有很多方式,前端返回文件流需要我们在axios请求封

    2024年04月25日
    浏览(45)
  • 后端返回文件流时,前端如何处理并成功下载流文件以及解决下载后打开显示不支持此文件格式

    文件(File)和流(Stream)是既有区别又有联系的两个概念。 文件 是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。       存储介质:文件是指在各种存储介质上(如硬盘、可移动磁盘、CD等)永久存储的数据        的有序集合,它是进行数

    2024年02月09日
    浏览(74)
  • C# WPF窗体设计器显示以及App.xaml文件打不开(VS 2022)

    在项目中遇到了App.xaml设计器打不开以及窗体设计器不显示,只有代码,如图所示: 可以明显的看见左下角的设计器不见,但是用户控件又有设计器 (一、App.xaml不能正常打开) ①清理项目 ②将不能正常打开的App.xaml以及App.xaml.cs文件右键从项目中排除 ③点击显示所有文件,将

    2024年02月06日
    浏览(56)
  • Docker中的RabbitMQ已经启动运行,但是管理界面打不开

    肯定有好多小伙伴在学习RabbitMQ的过程中,发现镜像运行,但是我的管理界面怎么进不去,或者说我第一天可以进去,怎么第二天进不去了,为什么每次重新打开虚拟机都进不去了。下面我总结了解决这两种问题的方法,都是个人经历过的血泪。 可能未开启管理界面 进入Ra

    2024年02月05日
    浏览(44)
  • DNS配置异常无法上网(明明有网,但是网页打不开了?)

    原因DNS无法解析网址,可以设置一个稳定好用的。 1.打开网络设置 2.选择适配器选项 3.打开正在使用的网络,选择属性 4.双击点开协议版本Internet4 5.把DNS改为自己设置 6.将DNS服务器改为下表中的任意一个,可以自己试,那个速度快用那个。

    2024年02月15日
    浏览(57)
  • MSN天气不显示数据、打不开、微软商店打不开报错0x80131500

    如果你可以正常打开微软应用商店,那么在微软应用商店,搜索到MSN天气,选择 更新 即可 重装系统后之前一直正常使用的MSN天气就无法显示出数据了,在微软商店查询评论时发现,我的MSN天气 不是最新版 的,点击更新后过了一段时间就可以正常显示数据了 如果你的微软商

    2024年02月16日
    浏览(47)
  • github打不开,下载不成功

    问题1:fatal: unable to access ‘https://github.com/.git/’: Failed to conne拒绝连接 有可能你的gitbub之前设置过代理,只需分别执行如下代码即可: git config --global --unset http.proxy git config --global --unset https.proxy 或者 git config --global url.git://github.com/.insteadOf https://github.com/ 如果还没有解决,将

    2024年02月03日
    浏览(41)
  • 小白下载以后打不开怎么解决

    我们重装系统时,大家会遇到各种各样的问题,现在有一些想用小白一键重装系统工具来帮助自己完成系统重装时,却发现我们打不开这个工具,现在不知道其原因有哪些,那么大家今天就来告诉小伙伴们小白一键重装官网下载以后打不开怎么办。 ​ 方法/步骤: 方法一:进

    2023年04月20日
    浏览(124)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包