{"version":3,"file":"file.mjs","sources":["../../../../packages/utils/file.ts"],"sourcesContent":["import { FileType } from 'ant-design-vue/es/upload/interface'\r\n/**\r\n * File 转 Base64\r\n * @param file     {File}   file\r\n * @return {Promise<String>}\r\n */\r\nexport function fileToBase64(file: File) {\r\n  return new Promise((resolve, reject) => {\r\n    const reader = new FileReader()\r\n\r\n    reader.addEventListener('load', (evt) => resolve(evt.target!.result))\r\n    reader.addEventListener('error', reject)\r\n    reader.readAsDataURL(file)\r\n  })\r\n}\r\n\r\nexport function formatFileSize(size: number) {\r\n  if (size < 1024) {\r\n    return `${size}Bytes`\r\n  } else if (size < 1024 * 1024) {\r\n    return `${(size / 1024).toFixed(0)}KB`\r\n  } else if (size < 1024 * 1024 * 1024) {\r\n    return `${(size / 1024 / 1024).toFixed(0)}MB`\r\n  } else {\r\n    return `${(size / 1024 / 1024 / 1024).toFixed(0)}GB`\r\n  }\r\n}\r\n\r\n/**\r\n * @description: base64 to blob\r\n */\r\nexport function dataURLtoBlob(base64Buf: string): Blob {\r\n  const arr = base64Buf.split(',')\r\n  const typeItem = arr[0]\r\n  const mime = typeItem.match(/:(.*?);/)![1]\r\n  const bstr = window.atob(arr[1])\r\n  let n = bstr.length\r\n  const u8arr = new Uint8Array(n)\r\n  while (n--) {\r\n    u8arr[n] = bstr.charCodeAt(n)\r\n  }\r\n  return new Blob([u8arr], { type: mime })\r\n}\r\n\r\n/**\r\n * 匹配文件类型是否符合 accept 规则\r\n * @param file 文件对象\r\n * @param accept accept 字符串，支持多种格式用逗号分隔\r\n * @returns 是否匹配\r\n */\r\nexport const matchAcceptType = (file: FileType, accept: string): boolean => {\r\n  if (!accept) return true\r\n  \r\n  const fileName = file.name.toLowerCase()\r\n  const fileType = file.type.toLowerCase()\r\n  \r\n  // 将 accept 按逗号分割，并去除空格\r\n  const acceptTypes = accept.toLowerCase().split(',').map(type => type.trim())\r\n  \r\n  return acceptTypes.some(acceptType => {\r\n    // 处理文件扩展名格式 (.pdf, .doc, .docx 等)\r\n    if (acceptType.startsWith('.')) {\r\n      return fileName.endsWith(acceptType)\r\n    }\r\n    \r\n    // 处理通配符 MIME 类型 (image/*, video/*, audio/*)\r\n    if (acceptType.includes('/*')) {\r\n      const [mainType] = acceptType.split('/')\r\n      const [fileMainType] = fileType.split('/')\r\n      return mainType === fileMainType\r\n    }\r\n    \r\n    // 处理具体的 MIME 类型\r\n    if (acceptType.includes('/')) {\r\n      return fileType === acceptType\r\n    }\r\n    \r\n    // 处理没有点的扩展名格式 (pdf, doc, docx 等)\r\n    return fileName.endsWith(`.${acceptType}`)\r\n  })\r\n}"],"names":[],"mappings":"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"}