首页 > 其他分享 >前端文件流下载--mockjs污染全局问题

前端文件流下载--mockjs污染全局问题

时间:2023-07-05 15:55:56浏览次数:47  
标签:responseType -- send custom xhr mockjs 全局 null

参考文章https://blog.csdn.net/daotian2016/article/details/123670179

 

项目场景:
项目场景:VUE工程,做了一个代码自动生成可以导出zip的功能。

问题描述
导出的zip文件打开提示“不可预料的压缩文件末端”,文件打不开。


export function downLoadZip(str, filename) {
var url = baseUrl + str
axios({
method: 'get',
url: url,
responseType: 'blob',
headers: { 'Authorization': 'Bearer ' + getToken() }
}).then(res => {
resolveBlob(res, mimeMap.zip)
})

原因分析:
分析是返回的数据流有丢失,所以在上面的代码段将返回的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)
}
})()
————————————————
版权声明:本文为CSDN博主「daotian2016」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/daotian2016/article/details/123670179

标签:responseType,--,send,custom,xhr,mockjs,全局,null
From: https://www.cnblogs.com/lzhflzjx/p/17528758.html

相关文章

  • C#图片按比例缩放实例
    下面是关于C#图片按比例缩放实例的详细攻略。步骤一:导入命名空间和设置窗口首先,在代码中导入必要的命名空间,以使用Image类和Bitmap类。usingSystem.Drawing;usingSystem.Drawing.Imaging;接着,在窗口中添加PictureBox控件,用于显示缩放后的图片。在属性中将SizeMode设置为Zo......
  • MedCalc v22.009 医学ROC曲线统计分析软件下载安装教程
    MedCalc是一款医学ROC曲线统计软件,用于ROC曲线分析的参考软件,医学工作者设计的医学计算器,功能齐全。它可以帮助医生快速作出普通的医学计算,从而对症下药。提供超过76种常用的规则和方法,包括:病人数据、单位参数、费用计算等等。甚至可以将图形另存为BMP,PNG,GIF,PCX,JPG或TIF文件,或......
  • Arduino Uno Rev3
        OverviewArduinoUno isamicrocontrollerboardbasedontheATmega328P(datasheet).Ithas14digitalinput/outputpins(ofwhich6canbeusedasPWMoutputs),6analoginputs,a16MHzceramicresonator(CSTCE16M0V53-R0),aUSBconnection......
  • FreeMarker指令语法【FreeMarker】
    一、基础语法种类1.1注释,即<#---->,介于其之间的内容会被FreeMarker忽略<#--我是一个FreeMarker注释-->1.2插值(Interpolation):即${..}部分,FreeMarker会用真实的值代替${..}Hello${name}1.3FTL指令:和HTML标记类似,名字前加#予以区分,FreeMarker......
  • 修复idea lombok报错
    错误信息:Youaren'tusingacompilersupportedbylombok,solombokwillnotworkandhasbeendisabled.Yourprocessoris:com.sun.proxy.$Proxy8Lomboksupports:sun/applejavac1.6,ECJ 解决:编译器-共享构建过程VM选项:-Djps.track.ap.dependencies=false......
  • cellos.20221115_030623类似的目录撑爆存储节点的root文件系统
    1、某Exadata客户,其中一个存储节点的根文件系统使用率超过90%,使用如下命令检查是哪些目录占用空间#du-sm*|sort-rn|head发现是/var/log目录下的东西占用大量空间。2、在/var/log目录下,存在大量cellos开头,但以日期结果的目录,这些目录占用大量磁盘空间。如下所示:drwxr-----7......
  • 04vgg剪枝
    数据集介绍Cifar10数据集是经典的图像分类数据。首先下载数据并制作成Dataset和DataLoaderDataset:Dataset是一个抽象类,它定义了数据的存储和访问方法。它的主要任务是加载和预处理数据。用户可以从此类派生出自定义的数据集类,以处理特定类型的数据(如图像、文本等)。DataLoader:D......
  • 试一下粒子吸附特效
    试一下粒子吸附特效<scriptid="c_n_script"src="https://blog-static.cnblogs.com/files/xiaokang01/js.js"color="240,230,140"opacity="1"count="75"zindex="-2">if(/Android|webOS|iPhone|iPod|BlackBerr......
  • 美团特供IDEA入门实战笔记CSDN显踪,竟无良程序员白嫖后举报下架
    今天给大家带来的是:黄文毅,罗军老师著的 《IntelliJIDEA入门与实战》 黄文毅,罗军是谁?黄文毅,CSDN博客专家,架构师。先后就职于厦门星耀蓝图、厦门美图、上海美团等公司。主要从事Java开发工作,具有丰富的软件开发经验,熟悉Java、高并发、分布式及相关的软件架构。出版《分布式......
  • k8s进阶面试
    docker与k8s的区别,分别适用于什么场景?docker只负责生成容器,没有其他功能,但部署简单,方便测试等,k8s附带的有各种功能:探针、污点、资源限制、高可用等,如果生产中的服务达到一定规模且需保证全链路监控及高可用,k8s是最佳选择docker的底层实现原理?如何运行一个容器?六种命名空间的共......