RuoYi
2021-10-25 3901695a6f81e51b155a7b27209e915f2a0e478d
解析blob响应是否登录失效
3 files modified
38 ■■■■ changed files
ruoyi-ui/src/plugins/download.js 11 ●●●● patch | view | raw | blame | history
ruoyi-ui/src/utils/request.js 16 ●●●● patch | view | raw | blame | history
ruoyi-ui/src/utils/ruoyi.js 11 ●●●●● patch | view | raw | blame | history
ruoyi-ui/src/plugins/download.js
@@ -1,6 +1,8 @@
import { saveAs } from 'file-saver'
import axios from 'axios'
import { Message } from 'element-ui'
import { saveAs } from 'file-saver'
import { getToken } from '@/utils/auth'
import { blobValidate } from "@/utils/ruoyi";
const baseURL = process.env.VUE_APP_BASE_API
@@ -12,9 +14,14 @@
      url: url,
      responseType: 'blob',
      headers: { 'Authorization': 'Bearer ' + getToken() }
    }).then(res => {
    }).then(async (res) => {
      const isLogin = await blobValidate(res.data);
      if (isLogin) {
      const blob = new Blob([res.data], { type: 'application/zip' })
      this.saveAs(blob, name)
      } else {
        Message.error('无效的会话,或者会话已过期,请重新登录。');
      }
    })
  },
  saveAs(text, name, opts) {
ruoyi-ui/src/utils/request.js
@@ -3,7 +3,7 @@
import store from '@/store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { tansParams } from "@/utils/ruoyi";
import { tansParams, blobValidate } from "@/utils/ruoyi";
import { saveAs } from 'file-saver'
let downloadLoadingInstance;
@@ -43,6 +43,10 @@
    const code = res.data.code || 200;
    // 获取错误信息
    const msg = errorCode[code] || res.data.msg || errorCode['default']
    // 二进制数据则直接返回
    if(res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer'){
      return res.data
    }
    if (code === 401) {
      MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
          confirmButtonText: '重新登录',
@@ -98,10 +102,14 @@
    transformRequest: [(params) => { return tansParams(params) }],
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    responseType: 'blob'
  }).then((data) => {
    const content = data
    const blob = new Blob([content])
  }).then(async (data) => {
    const isLogin = await blobValidate(data);
    if (isLogin) {
      const blob = new Blob([data])
    saveAs(blob, filename)
    } else {
      Message.error('无效的会话,或者会话已过期,请重新登录。');
    }
    downloadLoadingInstance.close();
  }).catch((r) => {
    console.error(r)
ruoyi-ui/src/utils/ruoyi.js
@@ -214,3 +214,14 @@
    }
    return result
}
// 验证是否为blob格式
export async function blobValidate(data) {
    try {
      const text = await data.text();
      JSON.parse(text);
      return false;
    } catch (error) {
      return true;
    }
}