vue中由 window.open转为二进制流下载 遇到下载之后无法打开或乱码的坑 (responseType: ‘blob‘ 无效)

54 篇文章 1 订阅
32 篇文章 0 订阅
在项目中使用axios进行文件下载时遇到问题,原本设置的responseType为blob,但实际下载的文件无法打开。经过排查,发现是Mockjs模块拦截了axios请求,将其响应类型重置为空,导致数据变为乱码。注释掉Mockjs后,文件下载恢复正常。
摘要由CSDN通过智能技术生成

我项目中 request.js文件用的是 axios请求的.

如果使用 window.open 下载的话没有太多要求了,但是安全性不行.

如果使用 二进制流的话就需要设置: responseType: 'blob' (设置请求返回类型)

function exportData(orgId, personName, gender) {
    return request({
        url: '/console/export/personal?orgId=' + orgId + '&personName=' + personName + '&gender=' + gender,
        method: 'get',
        responseType: 'blob',
    })
}

封装一个模拟超链接下载的方法  reagentData.js 文件 :

// 导出文件前端处理
function exportExcelIN(data,fileName){
    var blob = new Blob([data], {
        type: "application/vnd.ms-excel;charset=utf-8",
    });
    const URL = window.URL || window.webkitURL;
    const downloadElement = document.createElement("a");
    const href = URL.createObjectURL(blob); // 创建下载的链接
    downloadElement.href = href;
    downloadElement.download = fileName; // 下载后文件名
    document.body.appendChild(downloadElement);
    downloadElement.click(); // 点击下载
    document.body.removeChild(downloadElement); // 下载完成移除元素
    URL.revokeObjectURL(href); // 释放掉blob对象
}

export default {
    exportExcelIN
}

 当我调用接口获取后台数据,把后台数据和文件名给 reagentData.js文件中的exportExcelIN 进行超链接下载后,下载的文件打不开.

当我打印下载的数据时发现什么东西?

 返回的data是乱码而不是blob类型的. 通过不断地采坑发现是 mockjs影响的! ! !

由于这个项目不是我自己写的,不知是谁安装了一个mockjs模块用来模拟接口数据.

因为 mockjs 会拦截axios, 初始化的时候给拦截响应设置了 responseType: ' ', 只需要把 mockjs注释掉就可以了.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发那点事儿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值