fileProcessing.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // 图片/文件下载
  2. /**
  3. * @download 下载方法
  4. * @param url 下载地址
  5. * @param name 文件名称
  6. */
  7. const Fileonload = (url: any, name: any) => {
  8. // 创建一个 XMLHttpRequest 对象
  9. const xhr = new XMLHttpRequest();
  10. xhr.open("GET", url, true);
  11. xhr.responseType = "blob"; // 设置响应类型为 blob
  12. xhr.onload = function () {
  13. if (xhr.status === 200) {
  14. const blob = xhr.response; // 获取响应的 blob 对象
  15. const a = document.createElement("a"); // 生成一个 a 元素
  16. const event = new MouseEvent("click"); // 创建一个单击事件
  17. // 创建一个 URL 对象
  18. const downloadUrl = URL.createObjectURL(blob);
  19. a.href = downloadUrl; // 将生成的 URL 设置为 a.href 属性
  20. a.download = name; // 设置文件名称
  21. // 触发 a 的单击事件
  22. a.dispatchEvent(event);
  23. // 释放 URL 对象
  24. URL.revokeObjectURL(downloadUrl);
  25. } else {
  26. console.error("下载失败,状态码:", xhr.status);
  27. }
  28. };
  29. xhr.onerror = function () {
  30. console.error("请求失败");
  31. };
  32. xhr.send(); // 发送请求
  33. };
  34. /**
  35. *
  36. * @param formatFileSize 文件大小单位转换
  37. * @param size 文件size
  38. */
  39. function formatFileSize(size: any) {
  40. let Size = Number(size);
  41. if (Size < 0) {
  42. return "大小无效";
  43. }
  44. const units = ["B", "KB", "MB"];
  45. let index = 0;
  46. let formattedSize = Size;
  47. while (formattedSize >= 1024 && index < units.length - 1) {
  48. formattedSize /= 1024;
  49. index++;
  50. }
  51. return `${formattedSize.toFixed(0)} ${units[index]}`;
  52. }
  53. /**
  54. * @processFileName 处理文件名
  55. * @param fileName 文件名称
  56. * @returns
  57. */
  58. // 提取文件名中下划线前面的部分
  59. const processFileName = (fileName: any) => {
  60. const index = fileName?.lastIndexOf('_'); // 查找最后一个下划线的位置
  61. if (index !== -1) {
  62. return fileName.substring(0, index) + fileName.substring(fileName.lastIndexOf('.')); // 返回下划线前面的部分和文件后缀
  63. } else {
  64. return fileName; // 如果没有找到下划线,直接返回原文件名
  65. }
  66. };
  67. export { Fileonload, formatFileSize, processFileName }