| | |
| | | } |
| | | |
| | | /** |
| | | * 根据支持的文件类型生成 accept 属性值 |
| | | * |
| | | * @param supportedFileTypes 支持的文件类型数组,如 ['PDF', 'DOC', 'DOCX'] |
| | | * @returns 用于文件上传组件 accept 属性的字符串 |
| | | */ |
| | | export const generateAcceptedFileTypes = (supportedFileTypes: string[]): string => { |
| | | const allowedExtensions = supportedFileTypes.map((ext) => ext.toLowerCase()) |
| | | const mimeTypes: string[] = [] |
| | | |
| | | // 添加常见的 MIME 类型映射 |
| | | if (allowedExtensions.includes('txt')) { |
| | | mimeTypes.push('text/plain') |
| | | } |
| | | if (allowedExtensions.includes('pdf')) { |
| | | mimeTypes.push('application/pdf') |
| | | } |
| | | if (allowedExtensions.includes('html') || allowedExtensions.includes('htm')) { |
| | | mimeTypes.push('text/html') |
| | | } |
| | | if (allowedExtensions.includes('csv')) { |
| | | mimeTypes.push('text/csv') |
| | | } |
| | | if (allowedExtensions.includes('xlsx') || allowedExtensions.includes('xls')) { |
| | | mimeTypes.push('application/vnd.ms-excel') |
| | | mimeTypes.push('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') |
| | | } |
| | | if (allowedExtensions.includes('docx') || allowedExtensions.includes('doc')) { |
| | | mimeTypes.push('application/msword') |
| | | mimeTypes.push('application/vnd.openxmlformats-officedocument.wordprocessingml.document') |
| | | } |
| | | if (allowedExtensions.includes('pptx') || allowedExtensions.includes('ppt')) { |
| | | mimeTypes.push('application/vnd.ms-powerpoint') |
| | | mimeTypes.push('application/vnd.openxmlformats-officedocument.presentationml.presentation') |
| | | } |
| | | if (allowedExtensions.includes('xml')) { |
| | | mimeTypes.push('application/xml') |
| | | mimeTypes.push('text/xml') |
| | | } |
| | | if (allowedExtensions.includes('md') || allowedExtensions.includes('markdown')) { |
| | | mimeTypes.push('text/markdown') |
| | | } |
| | | if (allowedExtensions.includes('epub')) { |
| | | mimeTypes.push('application/epub+zip') |
| | | } |
| | | if (allowedExtensions.includes('eml')) { |
| | | mimeTypes.push('message/rfc822') |
| | | } |
| | | if (allowedExtensions.includes('msg')) { |
| | | mimeTypes.push('application/vnd.ms-outlook') |
| | | } |
| | | |
| | | // 添加文件扩展名 |
| | | const extensions = allowedExtensions.map((ext) => `.${ext}`) |
| | | |
| | | return [...mimeTypes, ...extensions].join(',') |
| | | } |
| | | |
| | | /** |
| | | * 首字母大写 |
| | | */ |
| | | export function firstUpperCase(str: string) { |