安装js-file-download插件
npm install js-file-download
封装下载请求,新建download.js
import axios from "axios";
const service = axios.create({
//响应类型
responseType: 'arraybuffer'
})
//请求拦截器
service.interceptors.request.use(config => {
config.headers['Authorization'] = window.sessionStorage.getItem('tokenStr');
return config;
}, error => {
console.log(error);
})
//相应拦截器
service.interceptors.response.use(resp => {
//相应头部信息
const headers = resp.headers;
//定义正则表达式(一般是流返回,但是也有可能是json字符串返回)
let reg = RegExp(/application\/json/);
//如果content-type和正则表达式匹配
if (headers['content-type'].match(reg)) {
//json格式转换
resp.data = unitToString(resp.data)
} else {
//返回流
//引入插件
let fileDownload = require('js-file-download');
//文件名
let fileName = headers['content-disposition'].split(';')[1].split('filename=')[1];
//相应类型
let contentType = headers['content-type']
//文件名格式转换(防止中文乱码)
fileName = decodeURIComponent(fileName);
//下载文件
fileDownload(resp.data, fileName, contentType);
}
}, error => {
console.log(error);
})
function unitToString(uintArray) {
let encodedString = String.fromCharCode.apply(null, new Uint8Array(uintArray));
let dencodedString = decodeURIComponent(escape(encodedString));
return JSON.parse(dencodedString)
}
//定义请求
let base = '';
export const downloadRequest = (url, params) => {
return service({
method: 'get',
url: `${
base}${
url}`,
data: params
})
}
//暴露出去
export default service;