download.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import axios from 'axios';
  2. import FileSaver from 'file-saver';
  3. import { getToken } from '@/utils/auth';
  4. import errorCode from '@/utils/errorCode';
  5. import { blobValidate } from '@/utils/ruoyi';
  6. import { LoadingInstance } from 'element-plus/es/components/loading/src/loading';
  7. const baseURL = import.meta.env.VITE_APP_BASE_API;
  8. let downloadLoadingInstance: LoadingInstance;
  9. export default {
  10. async oss(ossId: string | number) {
  11. const url = baseURL + '/resource/oss/download/' + ossId;
  12. downloadLoadingInstance = ElLoading.service({ text: '正在下载数据,请稍候', background: 'rgba(0, 0, 0, 0.7)' });
  13. try {
  14. const res = await axios({
  15. method: 'get',
  16. url: url,
  17. responseType: 'blob',
  18. headers: { Authorization: 'Bearer ' + getToken() }
  19. });
  20. const isBlob = blobValidate(res.data);
  21. if (isBlob) {
  22. const blob = new Blob([res.data], { type: 'application/octet-stream' });
  23. FileSaver.saveAs(blob, decodeURIComponent(res.headers['download-filename'] as string));
  24. } else {
  25. this.printErrMsg(res.data);
  26. }
  27. downloadLoadingInstance.close();
  28. } catch (r) {
  29. console.error(r);
  30. ElMessage.error('下载文件出现错误,请联系管理员!');
  31. downloadLoadingInstance.close();
  32. }
  33. },
  34. async zip(url: string, name: string) {
  35. url = baseURL + url;
  36. const res = await axios({
  37. method: 'get',
  38. url: url,
  39. responseType: 'blob',
  40. headers: {
  41. Authorization: 'Bearer ' + getToken(),
  42. datasource: localStorage.getItem('dataName')
  43. }
  44. });
  45. const isBlob = blobValidate(res.data);
  46. if (isBlob) {
  47. const blob = new Blob([res.data], { type: 'application/zip' });
  48. FileSaver.saveAs(blob, name);
  49. } else {
  50. this.printErrMsg(res.data);
  51. }
  52. },
  53. async printErrMsg(data: any) {
  54. const resText = await data.text();
  55. const rspObj = JSON.parse(resText);
  56. const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'];
  57. ElMessage.error(errMsg);
  58. }
  59. };