Vue Excel 文件流导出乱码快速解决方案

今日在开发一个导出功能,原本一个非常简单的功能,却没想里面藏了陷阱!

背景

前端导出的文件流乱码,此时确定非后端问题(可以在postman导出是否正常来判断)。

前端导出:

后端正常数据:

答疑

第一,如果你要做一个导出功能(后端返回的数据位文件流),那接口可能是类似的结构

红框为必不可少的参数,且与其他参数同级,如“data”,“headers”等,如果你没有,那“还没开始就已经结束了”。

第二,前端导出代码可能是类似的结构,网上代码大同小异

对于红框部分,我在测试导出的过程中, 有跟没有乱码结果是一样的,因为这个不是决定性因素(前提是后端返回的数据为utf-8格式的文件流)。

以上两点,在后端返回正常的文件流情况下,前端导出基本是没什么问题的。

但是!如果此时你导出的文件还是出现了乱码,那就需要更深入排查了。

在参考了大部分对于该问题的应对文章后,我总算是找到了解决方案!

深入排查

首先,排查返回的数据响应头数据结构,可在响应拦截器中打印出来,查看“request”中的“response”与“responseType”

如果出现了以上情况,“responseType”是空的,“response”(即“data”)不是blob对象而是一个字符串,这就有问题了。 

正常来说,前端响应接收到应该是一个blob对象,类似

针对这个问题,我排查了蛮久,明明自己在请求接口加了参数 responseType: 'blob'

为啥响应体该字段是空?且返回数据不是blob对象?

在参考了多篇博客,经过仔细排查之后,发现一个问题,就是我项目中使用了“mock”,没错,就是可以劫持请求的那个“mock”!也正是因为它,将我的“responseType”置空!如下:

vue.config.js 配置:

(此时process.env.VUE_APP_BUILD_MODE不是“nomock”,导致使用“mock”)

mock 配置:

(此时responseType: ' ',)

我尝试把使用“mock”的地方注释掉:

重启,导出,成功!!!

响应体也不吃意外的同步

总结

1、请求参数 responseType: 'blob'

2、new Blob([res], {type:"application/vnd.ms-excel;charset=UTF-8"})

3、移除“mock”,避免对请求进行劫持从而影响参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nature 综述(IF=88):微生物群落和土壤性质之间的相互作用

随着社会的发展,环境污染和自然资源的消耗日益严重,土壤生态系统的健康状况备受关注。然而,当前研究领域存在一个问题,即在研究土壤微生物群落结构的同时,忽略了微生物对土壤环境的影响。本文旨在探讨微生物如何通过生…

『大模型笔记』MIT 最新的科尔莫戈洛夫-阿诺德网络(Kolmogorov-Arnold Network,KAN)简介

MIT 最新的科尔莫戈洛夫-阿诺德网络(Kolmogorov-Arnold Network,KAN)简介 文章目录 一. 探索 AI 下一前沿:科尔莫戈洛夫-阿诺德网络(KAN)1.1 基础回顾:多层感知器(MLPs)1.2 引入科尔莫戈洛夫-阿诺德网络(KAN)1.3 神经网络架构的开创性变革四. 参考文献内容出自:htt…

submitUpload() { this.$refs.upload.submit(); },

submitUpload() {this.$refs.upload.submit();}, submitUpload() 是一个函数,调用该函数会将 Vue 组件中的上传组件中的文件上传到服务器上。这个函数通过 this.$refs.upload.submit() 来实现,其中 this.$refs.upload 可以获取到上传组件的 DOM 对象&am…

js怎么判断视频链接是否能播放

标题js怎么判断视频链接是否能播放 这个函数用提供的URL创建一个新的Video元素,并根据视频是否可以播放来解析一个Promise。它监听canplaythrough事件来确定视频是否可播放,并监听error事件来处理可能发生的任何错误。 function canPlayVideo(url) {re…

【树】简要理解树的概念

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 目录 1、树的概念2、树的相关概念3、结语 1、树的概念 树是一种非线性的数据结构,它…

js通过音频链接获取音频时长

js通过音频链接获取音频时长 要在JavaScript中从音频链接获取音频文件的持续时间,您可以使用fetch API来检索音频文件,然后使用audio API来获取持续时间。例子: function getAudioDuration(audioUrl) {return fetch(audioUrl).then((response) > re…

C#语言进阶

一、简单数据结构类 1. ArrayList ArrayList是一个 C# 为我们封装好的类,它的本质是一个 object 类型的数组。ArrayList类帮助我们实现了很多方法,比如数组的增删查改 1.1 声明 using System.Collections;ArrayList array new ArrayList(); 1.2 增…

利用光学和SAR数据进行亚马逊热带雨林监测

亚马逊热带雨林,670万平方公里,物种丰富,森林历史悠久。巴西环保局用光学和SAR数据进行森林监测,主要监测森林砍伐范围、人为破坏、非法采矿和隐蔽的飞机跑道。 图 2011年12月森林砍伐范围 在SAR强度数据上,被砍伐的森…

Java 实现Mybatis plus 批量删除

数据库实体字段并不映射的情况&#xff0c;直接请求体集合接收。 PostMapping("/removeIdsInfo")public R<Void> removeIdsInfo(RequestBody List<Integer> ids) {return exStudentService.removeIdsInfo(ids);} /**** 学生模块根据集合id 批量删除数据*…

HUE工具介绍使用

一、HUE工具介绍使用 HUE是CDH提供一个hive和hdfs的操作工具&#xff0c;在hue中编写了hiveSQl也可以操作hdfs的文件 http://hadoop01:9870 hdfs的web访问端口 hdfs://hadoop01:8020 hdfs的程序访问端口 进入hue

【Linux】了解信号产生的五种方式

文章目录 正文前的知识准备kill 命令查看信号man手册查看信号信号的处理方法 认识信号产生的5种方式1. 工具2. 键盘3. 系统调用kill 向任意进程发送任意信号raise 给调用方发送任意信号abort 给调用方发送SIGABRT信号 4. 软件条件5. 异常 正文前的知识准备 kill 命令查看信号 …

虚拟机桥接模式连接失败解决方案

问题&#xff1a; 虚拟机之前使用一直没有问题&#xff0c;某次开机后不能正常使用桥接模式了&#xff0c;确认防火墙等相关都已关闭设置好。 解决方案&#xff1a; 添加新的网络适配器后&#xff0c;改成桥接模式&#xff0c;然后保存后重新打开&#xff0c;可以正常使用

如何把一个ViewController加到另一个ViewController上

1.上代码&#xff1a; MyFriendViewController*myFriendVc [MyFriendViewController new]; [self addChildViewController:myFriendVc]; myFriendVc.view.frame self.view.bounds; [self.view addSubview:myFriendVc.view]; self.navigationItem.rightBarButtonItem my…

六、Web开发与MVC框架( ASP.NET基础)

在C#中&#xff0c;Web开发通常与ASP.NET框架相关。ASP.NET是一个用于构建Web应用程序和Web服务的框架&#xff0c;它允许开发人员使用多种编程语言&#xff08;包括C#&#xff09;来创建动态Web页面、Web API、Web服务和实时Web应用程序。 MVC&#xff08;Model-View-Control…

Ubuntu22.04怎么安装cuda11.3

环境&#xff1a; WSL2 Ubuntu22.04 问题描述&#xff1a; Ubuntu22.04怎么安装cuda11.3 之前是11.5 解决方案&#xff1a; 在Ubuntu 22.04上安装CUDA 11.3需要一些步骤&#xff0c;因为CUDA 11.3不是为Ubuntu 22.04官方支持的版本。但是&#xff0c;您仍然可以通过以下步…

“圣诞树图案的打印~C语言”

圣诞树图案的打印~C语言 题目原文&#xff1a;[圣诞树](https://www.nowcoder.com/practice/9a03096ed8ab449e9b10b0466de29eb2?tpId107&rp1&ru/ta/beginner-programmers&qru/ta/beginner-programmers/question-ranking&difficulty&judgeStatus&tags&…

IT行业现状洞察与未来趋势展望

随着科技的快速发展&#xff0c;IT行业已经深入到社会的各个角落&#xff0c;极大地改变了我们的工作和生活方式。本文将对IT行业的现状进行深入分析&#xff0c;并展望其未来的发展趋势。 一、IT行业现状 技术创新加速&#xff1a;云计算、大数据、人工智能、物联网、区块链…

牛客华为机试题——难度:入门(python实现)

HJ7 取近似值 HJ9 提取不重复的整数 HJ46 截取字符串 HJ58 输入n个整数&#xff0c;输出其中最小的k个 HJ101 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 HJ7 取近似值 描述&#xff1a;写出一个程序&#xff0c;接受一个正浮点数值&#xff0c;输…

分布式与一致性协议之常见疑惑(一)

常见疑惑 什么是线性一致性 线性一致性(Linearizability),也称为原子性或强一致性&#xff0c;是分布式系统中的一个一致性模型&#xff0c;它定义了系统对读写操作的行为&#xff0c;以确保系统表现得好像只有一个数据副本&#xff0c;并且所有操作都是原子的。 在线性一致性…

数据赋能(87)——数据要素:管理原则与原理

数据要素管理应遵循以下原则&#xff1a; 安全性原则&#xff1a;确保数据的安全性和隐私保护&#xff0c;防止数据泄露和滥用。准确性原则&#xff1a;保证数据的准确性和完整性&#xff0c;避免数据错误和误导。合规性原则&#xff1a;遵守相关法律法规和行业标准&#xff0…