import path from 'path'; export const getTextContentType = (ext: string) => { const textContentTypes = [ '.tsx', '.jsx', // '.conf', '.env', '.example', '.log', '.mjs', '.map', '.json5', ]; const include = textContentTypes.includes(ext); if (!include) { return {}; } const contentType = getContentTypeCore(ext); if (!contentType) { return {}; } return { 'Content-Type': contentType, }; }; // 获取文件的 content-type export const getContentTypeCore = (extname: string) => { const contentType = { '.html': 'text/html; charset=utf-8', '.js': 'text/javascript; charset=utf-8', '.css': 'text/css; charset=utf-8', '.txt': 'text/plain; charset=utf-8', '.tsx': 'text/typescript; charset=utf-8', '.ts': 'text/typescript; charset=utf-8', '.jsx': 'text/javascript; charset=utf-8', '.conf': 'text/plain; charset=utf-8', '.env': 'text/plain; charset=utf-8', '.example': 'text/plain; charset=utf-8', '.log': 'text/plain; charset=utf-8', '.mjs': 'text/javascript; charset=utf-8', '.map': 'application/json; charset=utf-8', '.json5': 'application/json5; charset=utf-8', '.json': 'application/json; charset=utf-8', '.png': 'image/png', '.jpg': 'image/jpg', '.gif': 'image/gif', '.svg': 'image/svg+xml', '.wav': 'audio/wav', '.mp4': 'video/mp4', '.md': 'text/markdown; charset=utf-8', // utf-8配置 '.ico': 'image/x-icon', // Favicon 图标 '.webp': 'image/webp', // WebP 图像格式 '.webm': 'video/webm', // WebM 视频格式 '.ogg': 'audio/ogg', // Ogg 音频格式 '.mp3': 'audio/mpeg', // MP3 音频格式 '.m4a': 'audio/mp4', // M4A 音频格式 '.m3u8': 'application/vnd.apple.mpegurl', // HLS 播放列表 '.pdf': 'application/pdf', // PDF 文档 '.doc': 'application/msword', // Word 文档 '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', // Word 文档 (新版) '.ppt': 'application/vnd.ms-powerpoint', // PowerPoint 演示文稿 '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation', // PowerPoint (新版) '.xls': 'application/vnd.ms-excel', // Excel 表格 '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', // Excel 表格 (新版) '.csv': 'text/csv; charset=utf-8', // CSV 文件 '.xml': 'application/xml; charset=utf-8', // XML 文件 '.rtf': 'application/rtf', // RTF 文本文件 '.eot': 'application/vnd.ms-fontobject', // Embedded OpenType 字体 '.ttf': 'font/ttf', // TrueType 字体 '.woff': 'font/woff', // Web Open Font Format 1.0 '.woff2': 'font/woff2', // Web Open Font Format 2.0 '.otf': 'font/otf', // OpenType 字体 '.wasm': 'application/wasm', // WebAssembly 文件 '.pem': 'application/x-pem-file', // PEM 证书文件 '.crt': 'application/x-x509-ca-cert', // CRT 证书文件 '.yaml': 'application/x-yaml; charset=utf-8', // YAML 文件 '.yml': 'application/x-yaml; charset=utf-8', // YAML 文件(别名) '.zip': 'application/octet-stream', }; return contentType[extname]; }; export const getContentType = (filePath: string) => { const extname = path.extname(filePath).toLowerCase(); const contentType = getContentTypeCore(extname); return contentType || 'application/octet-stream'; };