download.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import axios from 'axios'
  2. //此处忽略了部分非必要的导入
  3. import {MessageBox, Message} from 'element-ui'
  4. // create an axios instance
  5. const service = axios.create({
  6. //baseUrl请修改为你自己的url
  7. baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  8. // withCredentials: true, // send cookies when cross-domain requests
  9. timeout: 5000 // request timeout
  10. })
  11. // response interceptor
  12. service.interceptors.response.use(
  13. /**
  14. * If you want to get http information such as headers or status
  15. * Please return response => response
  16. */
  17. /**
  18. * Determine the request status by custom code
  19. * Here is just an example
  20. * You can also judge the status by HTTP Status Code
  21. */
  22. response => {
  23. let disposition = response.headers['content-disposition'];
  24. //以下部分有需要优化,如后端返回时没有携带文件后缀名,没有.时会有问题等等
  25. console.log(disposition);
  26. let filename = disposition?disposition.substring(disposition.indexOf('=')+1,disposition.indexOf('.')):"下载文件";
  27. let newName = decodeURI(escape(filename))
  28. let extName =disposition.substring(disposition.indexOf('.')+1)
  29. let blob = new Blob([response.data],{type: 'application/vnd.ms-excel'});
  30. let link = document.createElement("a");
  31. let evt = document.createEvent("HTMLEvents");
  32. evt.initEvent("click", false, false);
  33. link.href = URL.createObjectURL(blob);
  34. link.download = newName+"."+extName;
  35. link.style.display = "none";
  36. document.body.appendChild(link);
  37. link.click();
  38. window.URL.revokeObjectURL(link.href);
  39. },
  40. error => {
  41. console.log('err' + error) // for debug
  42. Message({
  43. message: error.message,
  44. type: 'error',
  45. duration: 5 * 1000
  46. })
  47. return Promise.reject(error)
  48. }
  49. )
  50. export default service