download.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. downloadLoadingInstance = ElLoading.service({ text: '正在下载数据,请稍候', background: 'rgba(0, 0, 0, 0.7)' });
  37. try {
  38. const res = await axios({
  39. method: 'get',
  40. url: url,
  41. responseType: 'blob',
  42. headers: {
  43. Authorization: 'Bearer ' + getToken(),
  44. datasource: localStorage.getItem('dataName')
  45. }
  46. });
  47. const isBlob = blobValidate(res.data);
  48. if (isBlob) {
  49. const blob = new Blob([res.data], { type: 'application/zip' });
  50. FileSaver.saveAs(blob, name);
  51. } else {
  52. this.printErrMsg(res.data);
  53. }
  54. downloadLoadingInstance.close();
  55. } catch (r) {
  56. console.error(r)
  57. ElMessage.error('下载文件出现错误,请联系管理员!')
  58. downloadLoadingInstance.close();
  59. }
  60. },
  61. async printErrMsg(data: any) {
  62. const resText = await data.text();
  63. const rspObj = JSON.parse(resText);
  64. const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'];
  65. ElMessage.error(errMsg);
  66. }
  67. };