使用vue+Springboot+easyExecl导出文件时,在浏览器中下载的文件总是打不开,并且显示这个错误


1.我们逐步进行排查,首先看是不是后端的问题。这里附上我后端的代码

 @GetMapping("/downloadTemplate")public void download(HttpServletResponse response) throws IOException {response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename=example.xlsx");List<Entry> entries = new ArrayList<Entry>();Entry entry = new Entry();entry.setQuestion("整改方案很清楚,但酒店不愿意整改,怎么办?");entry.setAnswer("A:升级到区域协调,及时在甲方在的微信群反馈,任何纠纷我们都不与酒店交涉。");entry.setQuestionType("工程师问题");entry.setDataSource("美团");entry.setKeyword("整改,方案,不整改,不愿整改");entry.setQuestionCategory("踏勘问题");entry.setEquipmentCategory("流程问题");entries.add(entry);EasyExcel.write(response.getOutputStream(), Entry.class).registerWriteHandler(CellStyleUtils.getHorizontalCellStyleStrategy()).sheet("sheet1").doWrite(entries);}

在后端的代码中,使用easyExecl将响应的数据转为了流的形式,这个代码看起来没有问题,我们使用localhost+downloadTemplate的方式进行请求接口,这里我就不演示了,最终的结果是成功下载,并且可以正常打开,这证明我们后端的代码没有问题。

2.我们看一眼返回的响应数据,在控制台打印

再看我们前端的代码

request(downloadTemplate, METHOD.GET,null,{responseType: 'blob'}).then(res => {console.log(res)if (res.status === 200) {let blob = new Blob([res.data], {type: res.data.type})const fileName = 'ProductTemplateCopy.xlsx';let downloadElement = document.createElement('a')let href = window.URL.createObjectURL(blob); //创建下载的链接downloadElement.href = href;downloadElement.download = fileName; //下载后文件名document.body.appendChild(downloadElement);downloadElement.click(); //点击下载document.body.removeChild(downloadElement); //下载完成移除元素window.URL.revokeObjectURL(href); //释放blobthis.$message.info('导出成功')}

请求接口时,我们设置返回的应该是blob文件,再看我们第二步,可以看到在这里blob文件被硬生生转换成了json格式的代码。然后下载后的文件就损坏报错。

为什么会出现这种情况呢?

文件发生了变化,他是在哪变化的?因此我想到了是响应的时候某一个地方应该进行了处理,在此,我使用的是antd-vue-admin这个模板,其中的mockjs会对所有的前端请求进行一个拦截处理,就会对blob产生影响。所以我尝试将src/main中的mock注释

注释之后,重新尝试请求接口,最终成功了。下载的文件也可以打开了。因此本次bug出现的原因是mock处理导致blob发生了变化。
行文至此,如果对你有帮助,请为作者点个赞。

vue+Springboot+easyexecl 导出excel文件打不开相关推荐

  1. (vue)vue导出excel文件打不开,或者文件内容为object object

    (vue)vue导出excel文件打不开,或者文件内容为object object[已解决] bug: 主要原因:没有注意到后端返回的数据格式,需要的是res而不是res.data 正确写法: < ...

  2. 应用phpexcel导出excel文件后打不开的问题解决方法

    应用phpexcel导出excel文件后打不开的问题解决方法 参考文章: (1)应用phpexcel导出excel文件后打不开的问题解决方法 (2)https://www.cnblogs.com/im ...

  3. swagger easyExcel导出Excel文件打不开,文件损坏

    alibaba/easyexcel文件导出 swagger easyExcel导出Excel文件打不开,文件损坏 文件下载打不开,将文件输出到本地发现可以打开,而且swagger下载的文件大小比本地文 ...

  4. swagger接口导出excel文件打不开

    swagger接口导出excel文件打不开: 接口添加produces="application/octet-stream" @ApiOperation(value = " ...

  5. Vue前端表格导出Excel文件

    前言 分享一个Vue前端导出Excel文件的方法.记录学习! 功能需求:将表格的全部数据导出Excel格式的文件 前端:Vue3+Element-Plus 这个导出方法全部为前端操作,后端只需要传入表 ...

  6. poi 通过浏览器导出excel文件打不开

    本机excel版本大于2007 maven引入jar包配置 <dependency><groupId>org.apache.poi</groupId><art ...

  7. java导出excel 打不开,poi 通过浏览器导出excel文件打不开

    本机excel版本大于2007 maven引入jar包配置 org.apache.poi poi-ooxml 3.9 dom4j dom4j 代码controller层 MemberSchoolCon ...

  8. springboot中使用poi导出excel文件(亲测实现了第一个功能)

    1.POI简介 Jakarta POI 是一套用于访问微软格式文档的Java API. 组件HWPF用于操作Word的; 组件HSSF用于操作Excel格式文件. 2.常用组件 HSSFWorkboo ...

  9. Vue+iview实现自定义格式导出Excel文件

    背景:项目中要实现一个导出Excel文件模板的功能,原来实现是通过后台生成然后前端请求下载,这样要消耗IO资源,然后看了一下之前项目的导出功能,发现原来Vue+iview可以实现本地数据导出,不过iv ...

最新文章

  1. Perl 模块安装遇到的问题解决办法
  2. 输出可爱的”杨辉三角”
  3. python简单代码演示效果-10分钟教你用python 30行代码搞定简单手写识别!
  4. CSS3学习笔记(一)--2015-12-3
  5. java工厂模式demo
  6. Mac很好用的音乐转换器:NoteBurner Spotify Music Converter mac
  7. 【目标检测】mAP评价标准
  8. svn怎么删除已提交的文件
  9. r7c刷机android6.0,OPPOR7c官方固件刷机教程_线刷|救砖教程图解
  10. Hearbeat + Nginx 安装配置
  11. 计算机如何进入ping,电脑怎么ping网络,教你电脑怎么ping网络
  12. java 将多个文件打包成压缩包下载
  13. 如何快速开发实用的应用软件?
  14. hive2.3.2+mysql5.7.21驱动包_2018-08-30期 Hive外部元数据库配置
  15. 华为手机双击确认怎么取消_华为双击屏幕放大怎么取消
  16. Linux命令 - head命令
  17. Win10系统桌面图标突然变成白色如何恢复
  18. 苹果系统服务器状态在哪里,详细解读iPhone上的系统定位服务
  19. 【几何】计算任意多边形面积
  20. 三星s9电池测试软件,三星Galaxy S9深度解析(二)配置、软件以及电池

热门文章

  1. 7个关于 CSS backgroundImage 好用的技巧
  2. python实现圣诞节圣诞树以及烟花
  3. 【SEO网站优化】— 百度爬虫的作用以及优化策略
  4. 名编辑电子杂志大师教程 | 元素旋转(文本、图片、视频等)
  5. Python加速技巧
  6. 基于莫尔效应的防伪技术
  7. html提交重置按钮居中,html中如何让提交按钮居中?
  8. github添加密钥
  9. Java工具类-生成随机汉字和名称
  10. 使用quagga/zebra的RIP实验