java判断上传文件类型
时间: 2023-10-30 15:06:17 浏览: 269
java实现上传文件类型检测过程解析
在Java中,可以通过以下方法来判断上传文件的类型:
1. 通过文件名后缀名判断
可以通过文件名中的后缀名来判断文件类型,例如:
```java
String fileName = "example.jpg";
if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) {
// 文件类型为jpg或jpeg
} else if (fileName.endsWith(".png")) {
// 文件类型为png
} else {
// 其他文件类型
}
```
但需要注意的是,文件名后缀可以被篡改,因此此方法不是十分可靠。
2. 通过文件的MIME类型判断
可以通过文件的MIME类型来判断文件类型,例如:
```java
import javax.activation.MimetypesFileTypeMap;
MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
String mimeType = mimeTypesMap.getContentType(filePath);
if (mimeType.startsWith("image/")) {
// 文件类型为图片
} else if (mimeType.startsWith("video/")) {
// 文件类型为视频
} else if (mimeType.startsWith("text/")) {
// 文件类型为文本文件
} else {
// 其他文件类型
}
```
需要注意的是,MIME类型也可以被篡改。
3. 通过文件内容判断
可以通过读取文件的内容来判断文件类型,例如:
```java
import java.io.*;
public static String getFileType(String filePath) throws IOException {
InputStream inputStream = new FileInputStream(filePath);
byte[] bytes = new byte[4];
inputStream.read(bytes);
inputStream.close();
String type = "";
String fileHead = bytesToHexString(bytes);
if (fileHead == null || fileHead.length() == 0) {
return null;
}
fileHead = fileHead.toUpperCase();
FileType[] fileTypes = FileType.values();
for (FileType fileType : fileTypes) {
if (fileHead.startsWith(fileType.getValue())) {
type = fileType.name();
break;
}
}
return type;
}
public static String bytesToHexString(byte[] bytes) {
StringBuilder stringBuilder = new StringBuilder();
if (bytes == null || bytes.length <= 0) {
return null;
}
for (int i = 0; i < bytes.length; i++) {
int v = bytes[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
enum FileType {
JPEG("FFD8FF"), // JPEG (jpg)
PNG("89504E47"), // PNG (png)
GIF("47494638"), // GIF (gif)
TIFF("49492A00"), // TIFF (tif)
BMP("424D"), // Windows Bitmap (bmp)
DWG("41433130"), // CAD (dwg)
PSD("38425053"), // Adobe Photoshop (psd)
RTF("7B5C727466"), // Rich Text Format (rtf)
XML("3C3F786D6C"), // XML (xml)
HTML("68746D6C3E"), // HTML (html)
PDF("255044462D312E"), // Adobe PDF (pdf)
ZIP("504B0304"), // ZIP Archive (zip)
RAR("52617221"), // RAR Archive (rar)
WAV("57415645"), // Wave (wav)
AVI("41564920"), // AVI (avi)
MP4("00000020667479706D70"), // MPEG-4 (mp4)
MPG("000001BA"), // MPEG (mpg)
WMV("3026B2758E66CF11"), // Windows Media Video (wmv)
MID("4D546864"); // MIDI (mid)
private String value = "";
private FileType(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
```
此方法可以通过读取文件的前几个字节来判断文件类型,比较可靠,但需要注意的是,不同类型的文件前几个字节可能是相同的,因此有一定的误判率。
阅读全文