关于前端导出文件打不开的问题

前言:不知道小伙伴们在开发当中有没有遇到这样的问题,业务需求是需要导出一个文件,后端会返回回来一个文件流,然后我们需要将其处理成为一个文件类型,常用的是导出excel文件。

如果在百度上一搜会发现其实很简单,思路大概是这样的

文件流
|
Blob类型
|
URL
|
创建a标签
|
指定href为URL
|
设置download属性来指定文件名

代码大概是这样的。

const downloadDoc = function(content, filename) { let a= document.createElement('a'); a.download = filename; a.style.display = 'none'; let blob = new Blob([content]); a.href = URL.createObjectURL(blob); document.body.appendChild(a); a.click(); document.body.removeChild(a);
};

大家都知道在默认情况下我们从后端拿到的是一个个类似乱码的一个文件流,实际上这个文件流是二进制数据流。就像下面这个一样。

而我今天犯的一个错误就是直接把这个二进制数据流传入这个中了,虽说代码也能继续走,也能下载文件,好像成功了但是发现文件是打不开的,原因其实出在content

我们可以查阅一下Blob类型的文档


要显示的创建一个blob类型,那么array必须是ArrayBuffer, ArrayBufferView, Blob, DOMString 其中的某一个,而今天我看了一下返回的类型是一个application/x-xls;charset=utf-8;所以不符合以上任意一种类型,所以此处转换失败了,就打不开了。

经过一顿百度,加上看看之前的代码,发现忘了添加responseType为blob了,然后赶紧加上,但是发现还是不行。

最后发现是自己加错位置了。

在这个我要提醒各位的是,responseType设置为blob类型时返回回来的就不是一堆乱码的数据流了,而是一个{ type:Blob,size:11111 },类似于这样的,而且responseType添加成功后,并不会显示的体现在请求头之中,我以前一直以为这个属性是体现在请求头中的,可能是受Content-Type的影响了叭,在使用axios发送请求时,千万不能往headers里面添加这个,否则造成的后果就是,请求头里面明明是有responseType:'blob’属性,你感觉你添加成功了,但是它就是不生效,我今天就是这个问题卡了我好久,然后看了一个axios配置才知道,加错位置了。


使用axios发送请求时,responseType是在headers之外的,这个一定要注意。我今天兴致勃勃的加在了headers里面,然后就不生效了,最后检查了一下才看出来。

保证一下几个点,responseType加对位置,第二保证new Blob()接受的是一个blob类型或者arrayBuffer类型,然后再使用那一段代码,那就一定没有问题。

关于前端导出文件打不开的问题相关推荐

  1. 前端导出文件,后端返回文件流过大直接干崩溃

    前端导出文件 前端很常见的导出需求 导出world xlsx 甚至是zip 在我这个项目中是导出图片,图片量还是蛮大的,直接干崩溃了 我们这里是后端同学直接返回的是文件流 通过调用接口拿到文件流后直接 ...

  2. 前端导出文件 前端导出excel表格 下载文件

    导出文件的过程 前端发请求, 后端处理后返回文件流, 前端通过Blob解析并下载 实现过程: 前端发请求 需要将响应类型更改为 arraybuffer 或 blob 不设置响应类型会导致下载的文件看起 ...

  3. 前端开发规范和开发文档的书写规范

    1. 前端的开发规范 目录构建的规范 命名原则: 简洁 比如: src 源代码 img 图片资源 js JavaScript脚本 dep 第三方依赖包 不使用复数 比如: 不使用 imgs docs ...

  4. 前端导出文件为word格式(React)

    对于前端导出word文档来说,感觉技术没有那么成熟(个人感觉,参数什么的也比较少) 我这里是用了这个mhtml-to-word这个库(这个库的信息更是少的可怜感觉,但还比较好用) 1.首先安装mhtm ...

  5. 导出文件后打不开_PPT | 快速导出4K超高视频

    一个学习的聚集地 有时制作PPT需要展示,但恰巧当时打不开或者软件不兼容,很麻烦,也很尴尬,不过转成视频也是可以展示的.怎么将PPT转变成视频呢?那么今天我在这里告诉大家,只需几步即可完成操作!而且还 ...

  6. 前端 JS实现彩票开奖走势图 连线

    之前做过一个用canvas实现的走势图效果,这次直接用JS实现吧.(在vue3 + TS的项目中实现的) 一.渲染页面的时候把需要连线的点加上"标记"类名 二.找出所有的" ...

  7. 前端 | Chrome打不开HTTPS个人网站的解决办法

    用hexo+yilia搭建好了个人博客,原本是部署到个人github的github page上的,但由于国外的服务器实在是太慢orz,而且用github的二级域名感觉也不够有牌面(像这样:ryante ...

  8. 前端 彩票开奖走势图的实现

    彩票开奖走势图的实现 页面结构 js 部分 效果图 做的是移动端的VUE + Vant.走势图每一条线都是一个canvas实现的 页面结构 部分参数我用"***"打个码,这里tbo ...

  9. 出血了:自费送10个小米智能音响,前端书 30本,下班前开奖

    喜讯:属于前端工程师的福利终于来了 马上就是双11了,祝各位前端开发者们节日快乐!为此,我们为大家精心准备了前端前端程序员大礼包!希望在未来的日子里,大家能继续陪伴我们前行,我们也将持续为大家带来更好 ...

最新文章

  1. conda创建子环境并注册kernel
  2. Kosaraju 算法检测有向图的强连通性
  3. 某公司Java面试题
  4. ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台
  5. iOS中 点击按钮无响应
  6. elementui的横向滚动_记一次element-ui配置化table组件的适应性问题(横向滚动条)...
  7. Windows系统口令扫描之——使用Tscrack扫描3389口令
  8. android修改系统分辨率,Android4.2修改系统分辨率的方法
  9. 医惠护理系统服务器错误,医惠智能云随访系统
  10. sfc/Windows 资源保护找到了损坏文件但无法修复
  11. 芯片行业相关公司及就业岗位汇总
  12. 2018-08-14云兴维智电话面试总结
  13. RabbitMQ之业务场景(四):动态创建,删除队列工具类,拿来即用
  14. 初窥 Python 的 import 机制
  15. 计算机十六进制是什么意思,2进制和16进制是什么意思?它们之间如何换算?
  16. Windows Server 做CA给Centos 颁发证书
  17. 皕杰基础平台的登录方式
  18. 心流状态---人们做事时内心的一种状态
  19. 独孤思维:没有复盘的项目,不会赚钱
  20. 正版微软Office应该如何选?Office 2019与Office 365区别在哪里?

热门文章

  1. 大小限制_微信传文件有大小限制怎么办?教你3秒把100MPPT压缩成10M
  2. Java全文搜索怎么弄的_全文搜索 简介
  3. pfamscan 的使用_使用 HMMER 进行 PFAM 注释
  4. Win10多用户同时远程桌面的另类解决方案---支持1809和1909和2004版本V2.0
  5. Java实现doc转docx
  6. 【数据结构与算法】期末复习刷题日寄Part01
  7. jtable如何从表格中定位_ja中怎样将一个JTable表中的指定行添加到数据库
  8. 关于python,如何更优雅地用%占位符
  9. 如何给table里的input赋值
  10. Adobe After Effects CC 2020 中英文语言切换方法