作者 RuoYi

解析blob响应是否登录失效

1 import { saveAs } from 'file-saver' 1 import { saveAs } from 'file-saver'
2 import axios from 'axios' 2 import axios from 'axios'
3 import { getToken } from '@/utils/auth' 3 import { getToken } from '@/utils/auth'
  4 +import { Message } from 'element-ui'
4 5
5 const baseURL = process.env.VUE_APP_BASE_API 6 const baseURL = process.env.VUE_APP_BASE_API
6 7
@@ -12,9 +13,14 @@ export default { @@ -12,9 +13,14 @@ export default {
12 url: url, 13 url: url,
13 responseType: 'blob', 14 responseType: 'blob',
14 headers: { 'Authorization': 'Bearer ' + getToken() } 15 headers: { 'Authorization': 'Bearer ' + getToken() }
15 - }).then(res => { 16 + }).then(async (res) => {
  17 + const isLogin = await this.blobValidate(res.data);
  18 + if (isLogin) {
16 const blob = new Blob([res.data]) 19 const blob = new Blob([res.data])
17 this.saveAs(blob, decodeURI(res.headers['download-filename'])) 20 this.saveAs(blob, decodeURI(res.headers['download-filename']))
  21 + } else {
  22 + Message.error('无效的会话,或者会话已过期,请重新登录。');
  23 + }
18 }) 24 })
19 }, 25 },
20 resource(resource) { 26 resource(resource) {
@@ -24,9 +30,14 @@ export default { @@ -24,9 +30,14 @@ export default {
24 url: url, 30 url: url,
25 responseType: 'blob', 31 responseType: 'blob',
26 headers: { 'Authorization': 'Bearer ' + getToken() } 32 headers: { 'Authorization': 'Bearer ' + getToken() }
27 - }).then(res => { 33 + }).then(async (res) => {
  34 + const isLogin = await this.blobValidate(res.data);
  35 + if (isLogin) {
28 const blob = new Blob([res.data]) 36 const blob = new Blob([res.data])
29 this.saveAs(blob, decodeURI(res.headers['download-filename'])) 37 this.saveAs(blob, decodeURI(res.headers['download-filename']))
  38 + } else {
  39 + Message.error('无效的会话,或者会话已过期,请重新登录。');
  40 + }
30 }) 41 })
31 }, 42 },
32 zip(url, name) { 43 zip(url, name) {
@@ -36,13 +47,27 @@ export default { @@ -36,13 +47,27 @@ export default {
36 url: url, 47 url: url,
37 responseType: 'blob', 48 responseType: 'blob',
38 headers: { 'Authorization': 'Bearer ' + getToken() } 49 headers: { 'Authorization': 'Bearer ' + getToken() }
39 - }).then(res => { 50 + }).then(async (res) => {
  51 + const isLogin = await this.blobValidate(res.data);
  52 + if (isLogin) {
40 const blob = new Blob([res.data], { type: 'application/zip' }) 53 const blob = new Blob([res.data], { type: 'application/zip' })
41 this.saveAs(blob, name) 54 this.saveAs(blob, name)
  55 + } else {
  56 + Message.error('无效的会话,或者会话已过期,请重新登录。');
  57 + }
42 }) 58 })
43 }, 59 },
44 saveAs(text, name, opts) { 60 saveAs(text, name, opts) {
45 saveAs(text, name, opts); 61 saveAs(text, name, opts);
  62 + },
  63 + async blobValidate(data) {
  64 + try {
  65 + const text = await data.text();
  66 + JSON.parse(text);
  67 + return false;
  68 + } catch (error) {
  69 + return true;
46 } 70 }
  71 + },
47 } 72 }
48 73