index.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { last } from "lodash-es";
  2. import { filename, extname } from "/@/cool/utils";
  3. import { module } from "/@/cool";
  4. import type { Upload } from "../types";
  5. // 模块参数
  6. const { options } = module.get("upload");
  7. // 规则列表
  8. const rules: Upload.Rule[] = options.rules || [];
  9. // 文件大小
  10. export function fileSize(size = 0): string {
  11. const num = 1024.0;
  12. if (size < num) return size + "B";
  13. if (size < Math.pow(num, 2)) return (size / num).toFixed(2) + "K";
  14. if (size < Math.pow(num, 3)) return (size / Math.pow(num, 2)).toFixed(2) + "M";
  15. if (size < Math.pow(num, 4)) return (size / Math.pow(num, 3)).toFixed(2) + "G";
  16. return (size / Math.pow(num, 4)).toFixed(2) + "T";
  17. }
  18. // 文件名
  19. export function fileName(url: string) {
  20. return filename(url.substring(url.indexOf("_") + 1));
  21. }
  22. // 文件规则
  23. export function fileRule(path?: string) {
  24. const d = rules.find((e) => {
  25. return e.exts.find((a) => a == extname(path || "").toLocaleLowerCase());
  26. });
  27. return (d || last(rules))!;
  28. }
  29. // 获取规则
  30. export function getRule(type?: string) {
  31. return (rules.find((e) => e.type == type) || last(rules))!;
  32. }
  33. // 获取类型
  34. export function getType(path: string) {
  35. return fileRule(path).type;
  36. }
  37. // 拼接数组下的url
  38. export function getUrls(list: any[]) {
  39. return list.map((e) => e.url.replace(/,/g, encodeURIComponent(",")));
  40. }
  41. // 路径拼接
  42. export function pathJoin(...parts: string[]): string {
  43. if (parts.length === 0) {
  44. return "";
  45. }
  46. const firstPart = parts[0];
  47. let isAbsolute = false;
  48. // 检查第一个部分是否以 "http" 开头,以确定路径类型(绝对还是相对)
  49. if (firstPart.startsWith("http")) {
  50. isAbsolute = true;
  51. }
  52. // 标准化路径,去除任何开头或结尾的斜杠
  53. const normalizedParts = parts.map((part) => part.replace(/(^\/+|\/+$)/g, ""));
  54. if (isAbsolute) {
  55. // 如果是绝对路径,使用斜杠连接部分
  56. return normalizedParts.join("/");
  57. } else {
  58. // 如果是相对路径,使用平台特定的分隔符连接部分
  59. return normalizedParts.join("/");
  60. }
  61. }