public class FileTypeUtils {
private static final Logger logger = LoggerFactory.getLogger(FileTypeUtils.class);
//默认判断文件头前三个字节内容
public static int default_check_length=3;
final static HashMap<String,String> fileTypeMap=new HashMap<>();
//初始化文件头类型 现支持pdf,xls
static {
fileTypeMap.put("255044","pdf");
fileTypeMap.put("d0cf11","xls");
}
/**
* 通过文件头获取文件类型
*/
public static String getFileTypeByMagicNumber(InputStream inputStream){
byte[] bytes=new byte[default_check_length];
try {
//获取文件头前三位模数的二进制
inputStream.read(bytes,0,bytes.length);
//文件头前三位模数二进制转为16进制
String code=bytesToHexString(bytes);
logger.info("文件头={}",code);
for(Map.Entry<String,String> item:fileTypeMap.entrySet()){
if(code.equals(item.getKey())){
return item.getValue();
}
}
}catch (IOException e){
return null;
}
return "";
}
public static String bytesToHexString(byte[] bytes){
StringBuffer stringBuffer=new StringBuffer();
for(int i=0;i<bytes.length;i++){
int v=bytes[i] & 0xFF;
String hv=Integer.toHexString(v);
if(hv.length()<2){
stringBuffer.append(0);
}
stringBuffer.append(hv);
}
return stringBuffer.toString();
}
}
通过文件头部判断文件上传类型
本文介绍了一个名为FileTypeUtils的Java类,用于通过分析文件头前几个字节来识别PDF或XLS文件类型。方法getFileTypeByMagicNumber从InputStream读取数据并转换为16进制进行匹配。
摘要由CSDN通过智能技术生成