import { last } from "lodash-es"; import { filename, extname } from "/@/cool/utils"; import { module } from "/@/cool"; import type { Upload } from "../types"; // 模块参数 const { options } = module.get("upload"); // 规则列表 const rules: Upload.Rule[] = options.rules || []; // 文件大小 export function fileSize(size = 0): string { const num = 1024.0; if (size < num) return size + "B"; if (size < Math.pow(num, 2)) return (size / num).toFixed(2) + "K"; if (size < Math.pow(num, 3)) return (size / Math.pow(num, 2)).toFixed(2) + "M"; if (size < Math.pow(num, 4)) return (size / Math.pow(num, 3)).toFixed(2) + "G"; return (size / Math.pow(num, 4)).toFixed(2) + "T"; } // 文件名 export function fileName(url: string) { return filename(url.substring(url.indexOf("_") + 1)); } // 文件规则 export function fileRule(path?: string) { const d = rules.find((e) => { return e.exts.find((a) => a == extname(path || "").toLocaleLowerCase()); }); return (d || last(rules))!; } // 获取规则 export function getRule(type?: string) { return (rules.find((e) => e.type == type) || last(rules))!; } // 获取类型 export function getType(path: string) { return fileRule(path).type; } // 拼接数组下的url export function getUrls(list: any[]) { return list.map((e) => e.url.replace(/,/g, encodeURIComponent(","))); } // 路径拼接 export function pathJoin(...parts: string[]): string { if (parts.length === 0) { return ""; } const firstPart = parts[0]; let isAbsolute = false; // 检查第一个部分是否以 "http" 开头,以确定路径类型(绝对还是相对) if (firstPart.startsWith("http")) { isAbsolute = true; } // 标准化路径,去除任何开头或结尾的斜杠 const normalizedParts = parts.map((part) => part.replace(/(^\/+|\/+$)/g, "")); if (isAbsolute) { // 如果是绝对路径,使用斜杠连接部分 return normalizedParts.join("/"); } else { // 如果是相对路径,使用平台特定的分隔符连接部分 return normalizedParts.join("/"); } }