springboot项目启动时先从数据库加载参数定义成静态变量,方便调用
@Component
public class FileTypeDetector {
/**
* 日志
*/
private final static Logger logger = LoggerFactory.getLogger(FileTypeDetector.class);
@Autowired
private FileSuffixMappingBiz fileSuffixMappingBiz;
private static final String UNKNOWN_TYPE = "unkown_type";
public static List<FileSuffixMapping> fileSuffixMappings = new ArrayList<>();
/**
* @Description:
*
* @param
* @Return: void
* @Author: xxx
* @Date: 2019/xx/xx
*/
@PostConstruct
public void initFileSuffix() {
//在服务启动时查询数据库数据存入static形式的list中
fileSuffixMappings = fileSuffixMappingBiz.selectFileSuffix();
}
public static String detect(String fileName) {
//如果文件名为空,返回无效type
if (StringUtils.isBlank(fileName)) {
return UNKNOWN_TYPE;
}
//获取后缀
String fileSuffix = fileName.substring(fileName.lastIndexOf(".") > 0 ? fileName.lastIndexOf(".") : 0);
if (fileSuffixMappings.stream().anyMatch(item -> fileSuffix.equals(item.getFileSuffix()))) {
return fileSuffix;
} else {
return UNKNOWN_TYPE;
}
}
/**
* @Description: 根据文件名判断文件是否是已知的类型
*
* @param fileName
* @Return: boolean
* @Author: xxx
* @Date: 2019/8/16
*/
public static boolean isKnownTypeByName(String fileName) {
final String typeHint = detect(fileName);
return !typeHint.equals(UNKNOWN_TYPE);
}
/**
* @Description: 根据文件名获取文件的类型
*
* @param fileName
* @Return: boolean
* @Author: xxx
* @Date: 2019/8/16
*/
public static String getFileTypeByFileName(String fileName) {
String fileType = UNKNOWN_TYPE;
//如果文件名为空,返回无效type
if (StringUtils.isBlank(fileName)) {
return fileType;
}
//获取后缀
String fileSuffix = fileName.substring(fileName.lastIndexOf(".") > 0 ? fileName.lastIndexOf(".") : 0);
for (FileSuffixMapping fileSuffixMapping : fileSuffixMappings) {
if (fileSuffix.equalsIgnoreCase(fileSuffixMapping.getFileSuffix())) {
fileType = fileSuffixMapping.getFileType();
break;
}
}
return fileType;
}
}