帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

112 lines
2.4 KiB

package com.fr.design.jxbrowser;
import com.fr.stable.StringUtils;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Optional;
/**
* jxbrowser 使用的一些媒体类型
*
* @author vito
* @since 11.0
* Created on 2023/6/13
*/
public enum MimeType {
/**
* html 格式
*/
HTML(".html", "text/html"),
/**
* CSS 格式
*/
CSS(".css", "text/css"),
/**
* js 格式
*/
JS(".js", "text/javascript"),
/**
* svg 格式
*/
SVG(".svg", "image/svg+xml"),
/**
* png 格式
*/
PNG(".png", "image/png"),
/**
* jpg 格式
*/
JPG(".jpg", "image/jpeg"),
/**
* jpeg 格式
*/
JPEG(".jpeg", "image/jpeg"),
/**
* gif 格式
*/
GIF(".gif", "image/gif"),
/**
* woff 字体格式
*/
WOFF(".woff", "font/woff"),
/**
* ttf 字体格式
*/
TTF(".ttf", "truetype"),
/**
* MS 嵌入式开放字体
*/
EOT(".eot", "embedded-opentype");
private final String suffix;
private final String mimeType;
MimeType(String suffix, String mimeType) {
this.suffix = suffix;
this.mimeType = mimeType;
}
public String getMimeType() {
return mimeType;
}
/**
* 获取指定路径对应的 mimetype,优先匹配常量中的类型
* 如果没有,尝试使用 Files.probeContentType 检测
* 如果没有,默认返回 text/html
*
* @param resourcePath 资源路径
* @return MimeType
*/
public static String parseMimeType(String resourcePath) {
if (StringUtils.isBlank(resourcePath)) {
return HTML.mimeType;
}
Optional<MimeType> mimeType = Arrays.stream(values())
.filter(type -> resourcePath.endsWith(type.suffix))
.findFirst();
if (mimeType.isPresent()) {
return mimeType.get().mimeType;
} else {
return getFileMimeType(resourcePath);
}
}
private static String getFileMimeType(String finalPath) {
Path file = new File(finalPath).toPath();
try {
String s = Files.probeContentType(file);
return StringUtils.isEmpty(s) ? HTML.mimeType : s;
} catch (IOException e) {
return HTML.mimeType;
}
}
}