package org.voovan.http.server; import org.voovan.http.server.context.WebContext; import org.voovan.tools.TObject; import org.voovan.tools.TString; import java.util.Map; /** * MIME 相关处理 * * @author helyho * * Voovan Framework. * WebSite: https://github.com/helyho/Voovan * Licence: Apache v2 License */ public class MimeTools { private static String mimeTypeRegex = MimeTools.buildMimeMatchRegex(WebContext.getMimeDefine()); private MimeTools(){ } /** * 获取 MIME 正则表达式 * @return MIME 正则表达式 */ public static String getMimeTypeRegex(){ return mimeTypeRegex; } /** * 根据 MIME 的配置拼装匹配类型的正则表达式 * @param mimeTypes MIME 类型 * @return 匹配MIME类型的正则表达式 */ private static String buildMimeMatchRegex(Map<String, Object> mimeTypes){ String mimeTypeRegex = ""; StringBuilder mimeTypeRegexSB = new StringBuilder(); for(String fileExtension : mimeTypes.keySet()){ mimeTypeRegexSB.append("\\."); mimeTypeRegexSB.append(fileExtension); mimeTypeRegexSB.append("$|"); } mimeTypeRegex = mimeTypeRegexSB.toString(); mimeTypeRegex = TString.removeSuffix(mimeTypeRegex)+"$"; return mimeTypeRegex; } /** * 根据文件扩展名获取 MIME 类型 * @param fileExtension 文件扩展名 * @return MIME 类型 */ public static String getMimeByFileExtension(String fileExtension){ Object mimeTypeObj = WebContext.getMimeDefine().get(fileExtension.toLowerCase()); return TObject.nullDefault(mimeTypeObj,"application/octet-stream").toString(); } /** * 判断是否是 Mime 类型文件 * @param path 请求路径 * @return 是否是Mime 类型文件 */ public static boolean isMimeFile(String path){ return TString.regexMatch(path, mimeTypeRegex)>0?true:false; } }