download2.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import axios from 'axios'
  2. import { ElMessage } from 'element-ui'
  3. import { saveAs } from 'file-saver'
  4. import { getAccessToken } from '@/utils/auth'
  5. const baseURL = import.meta.env.VITE_BASE_URL
  6. const errorCode = {
  7. 401: '认证失败,无法访问系统资源',
  8. 403: '当前操作没有权限',
  9. 404: '访问资源不存在',
  10. default: '系统未知错误,请反馈给管理员'
  11. }
  12. async function blobValidate(data) {
  13. try {
  14. const text = await data.text()
  15. JSON.parse(text)
  16. return false
  17. } catch (error) {
  18. return true
  19. }
  20. }
  21. export default {
  22. name(name, isDelete = true) {
  23. var url =
  24. baseURL + '/common/download?fileName=' + encodeURIComponent(name) + '&delete=' + isDelete
  25. axios({
  26. method: 'get',
  27. url: url,
  28. responseType: 'blob',
  29. headers: { Authorization: 'Bearer ' + getAccessToken() }
  30. }).then(async (res) => {
  31. const isLogin = await blobValidate(res.data)
  32. if (isLogin) {
  33. const blob = new Blob([res.data])
  34. this.saveAs(blob, decodeURIComponent(res.headers['download-filename']))
  35. } else {
  36. this.printErrMsg(res.data)
  37. }
  38. })
  39. },
  40. resource(resource) {
  41. var url = baseURL + '/common/download/resource?resource=' + encodeURIComponent(resource)
  42. axios({
  43. method: 'get',
  44. url: url,
  45. responseType: 'blob',
  46. headers: { Authorization: 'Bearer ' + getAccessToken() }
  47. }).then(async (res) => {
  48. const isLogin = await blobValidate(res.data)
  49. if (isLogin) {
  50. const blob = new Blob([res.data])
  51. this.saveAs(blob, decodeURIComponent(res.headers['download-filename']))
  52. } else {
  53. this.printErrMsg(res.data)
  54. }
  55. })
  56. },
  57. zip(url, name) {
  58. var url = baseURL + url
  59. axios({
  60. method: 'get',
  61. url: url,
  62. responseType: 'blob',
  63. headers: { Authorization: 'Bearer ' + getAccessToken() }
  64. }).then(async (res) => {
  65. const isLogin = await blobValidate(res.data)
  66. if (isLogin) {
  67. const blob = new Blob([res.data], { type: 'application/zip' })
  68. this.saveAs(blob, name)
  69. } else {
  70. this.printErrMsg(res.data)
  71. }
  72. })
  73. },
  74. saveAs(text, name, opts) {
  75. saveAs(text, name, opts)
  76. },
  77. async printErrMsg(data) {
  78. const resText = await data.text()
  79. const rspObj = JSON.parse(resText)
  80. const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
  81. ElMessage.error(errMsg)
  82. }
  83. }