DownloadService.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import Common from './Common.js';
  2. import Notify from './Notify.js';
  3. /**
  4. * 报表下载服务
  5. */
  6. export default {
  7. /**
  8. * GET 方式下载文件
  9. * @param {*} url
  10. * @param {*} fileName
  11. */
  12. downloadFile: function (url, fileName) {
  13. var xhr = new XMLHttpRequest();
  14. xhr.open('get', url, true);
  15. const token = localStorage.getItem('#token');
  16. xhr.setRequestHeader('token', token);
  17. xhr.setRequestHeader('Content-type', 'application/json');
  18. xhr.responseType = 'blob';
  19. xhr.onreadystatechange = function(){
  20. if(xhr.readyState === 4 && xhr.status === 200){
  21. let res = xhr.response;
  22. let type = xhr.getResponseHeader('Content-Type');
  23. let blob = new Blob([res], { type: type });
  24. const blobUrl = URL.createObjectURL(blob);
  25. const link = document.createElement('a');
  26. link.download = fileName;
  27. link.style.display = 'none';
  28. link.href = blobUrl;
  29. document.body.appendChild(link);
  30. link.click();
  31. URL.revokeObjectURL(blobUrl);
  32. document.body.removeChild(link);
  33. }
  34. };
  35. xhr.send();
  36. },
  37. /**
  38. * 报表下载
  39. * @param {Object} fileName
  40. * @author GuoZhiBo 20200410
  41. */
  42. reportDownload: function (fileName) {
  43. var downloadUrl = Common.getApiURL('file/reportDownload') + '?fileName=' + window.encodeURIComponent(fileName);
  44. this.downloadFile(downloadUrl, fileName);
  45. },
  46. /**
  47. * 文件下载
  48. * @param {Object} className 类名称
  49. * @param {Object} fileName 文件名称
  50. * @author GuoZhiBo 20211008
  51. */
  52. fileDownload:function(className, fileName){
  53. var downloadUrl = Common.getApiURL('file/fileDownload') + '?className=' + className
  54. + '&fileName=' + window.encodeURIComponent(fileName);
  55. this.downloadFile(downloadUrl, fileName);
  56. },
  57. /**
  58. * POST 方式下载文件
  59. * @param {http请求的地址} url
  60. * @param {post请求需要的参数} params
  61. */
  62. postDownloadFile: function (url, params) {
  63. var form = document.createElement('form');
  64. form.style.display = 'none';
  65. form.action = url;
  66. form.method = 'post';
  67. document.body.appendChild(form);
  68. // 动态创建input并给value赋值
  69. for (var key in params) {
  70. var input = document.createElement('input');
  71. input.type = 'hidden';
  72. input.name = key;
  73. input.value = params[key];
  74. form.appendChild(input);
  75. }
  76. form.submit();
  77. form.remove();
  78. },
  79. };