vue 导出文件空白 导出EXCEL打不开

问题描述

请求后台接口导出文件,文件打开空白页面但是有页码和大小

解决办法:

1》请求接口是否设置了responseType

2》确认项目是否引入MOCK

原因分析:

分析是返回的数据流有丢失,所以在上面的代码段将返回的res的结果给打印出来。

发现返回的data是一串乱码,并不是blob格式的文件流。

通过这个情况,在网上搜了半天,才发现是Mockjs污染了responseType,默认会将responseType变为''

那么第一种解决办法已经有了,就是修改Mockjs,文件路径是node_modules>mockjs>dist>mock.js

// 原生 XHR

if (!this.match) {

this.custom.xhr.responseType = this.responseType //新加的解决该问题的代码

this.custom.xhr.send(data)

return

}

那么这样改后,重新编译,测试,发现问题解决,返回值如下图。

但是这样只适合个人开发,实际上协同开发,或者用Jenkins自动部署时,会从npm下载Mockjs的源码,还是会有问题,那么怎么在不改Mockjs源码的情况下,解决该问题呢?

解决方案:

那么唯一的解决办法就是重写mockjs相关的部分,具体代码参考下面的

// 修复 mockjs 相关 bug

Mock.XHR.prototype.send = (() => {

const _send = Mock.XHR.prototype.send

return function() {

if (!this.match) {

this.custom.xhr.responseType = this.responseType || ''

this.custom.xhr.timeout = this.timeout || 0

this.custom.xhr.withCredentials = this.withCredentials || false

this.custom.xhr.onabort = this.onabort || null

this.custom.xhr.onerror = this.onerror || null

this.custom.xhr.onload = this.onload || null

this.custom.xhr.onloadend = this.onloadend || null

this.custom.xhr.onloadstart = this.onloadstart || null

this.custom.xhr.onprogress = this.onprogress || null

this.custom.xhr.onreadystatechange = this.onreadystatechange || null

this.custom.xhr.ontimeout = this.ontimeout || null

}

return _send.apply(this, arguments)

}

})()

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
A黄俊辉A3 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄3 天前
JavaScript 隐式全局变量解析
javascript
honkun63 天前
vue 表格组件 vxe-table 配置 ajax 请求自动加载数据与表单查询
vue.js·vxe-table
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net