download.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * 根据url和name下载文件
  3. * @param url 文件url
  4. * @param name 文件名
  5. */
  6. export const downloadFile = (url: string | undefined, name: string): void => {
  7. if (!url) return;
  8. // 创建XMLHttpRequest请求
  9. const request = new XMLHttpRequest();
  10. request.responseType = "blob";
  11. // 打开请求
  12. request.open("GET", encodeURI(url));
  13. // 设置onload回调函数
  14. request.onload = function () {
  15. if (this.status === 200) {
  16. // 创建Blob URL
  17. const blobUrl = window.URL.createObjectURL(this.response);
  18. // 创建a标签
  19. const link = document.createElement('a');
  20. // 设置下载链接
  21. link.href = blobUrl;
  22. // 设置下载文件名
  23. link.download = name;
  24. // 设置链接样式为不可见
  25. link.style.display = 'none';
  26. // 添加到文档中
  27. document.body.appendChild(link);
  28. // 触发点击事件执行下载
  29. link.click();
  30. // 下载完成后移除该元素
  31. document.body.removeChild(link);
  32. // 释放blob URL
  33. window.URL.revokeObjectURL(blobUrl);
  34. }
  35. };
  36. // 添加错误处理
  37. request.onerror = function() {
  38. console.error('下载文件失败');
  39. };
  40. // 发送请求
  41. request.send();
  42. };