java 文件上传 文件类型判断
时间: 2023-09-12 22:10:21 浏览: 300
在进行文件上传时,需要对文件类型进行判断,以防止上传不合法的文件。以下是一种基于文件后缀名的文件类型判断方法:
```java
// 获取文件后缀名
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
// 判断文件类型
if ("jpg".equalsIgnoreCase(suffix) || "jpeg".equalsIgnoreCase(suffix) || "png".equalsIgnoreCase(suffix)) {
// 允许上传的图片类型
} else if ("doc".equalsIgnoreCase(suffix) || "docx".equalsIgnoreCase(suffix) || "pdf".equalsIgnoreCase(suffix)) {
// 允许上传的文档类型
} else {
// 不允许上传的文件类型
}
```
上述代码中,先获取文件名的后缀名,然后根据后缀名判断文件类型。在判断文件类型时,可以根据实际需求添加或修改允许上传的文件类型。
相关问题
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;
}
}
```
此方法可以通过读取文件的前几个字节来判断文件类型,比较可靠,但需要注意的是,不同类型的文件前几个字节可能是相同的,因此有一定的误判率。
java判断MultipartFile文件类型
可以通过 MultipartFile 对象的 getContentType() 方法获取文件的 MIME 类型,然后根据 MIME 类型判断文件类型。
例如,判断上传的文件是否为图片可以使用以下代码:
```java
MultipartFile file = ...;
String contentType = file.getContentType();
if (contentType.startsWith("image/")) {
// 文件类型为图片
} else {
// 文件类型不是图片
}
```
其中,startsWith() 方法用于判断字符串是否以指定的前缀开头。在上述代码中,如果文件类型以 "image/" 开头,则判断为图片类型,否则为其他类型。
阅读全文