vue文件下载请求

安装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;

猜你喜欢

转载自blog.csdn.net/weixin_55806809/article/details/121573553