Java 中 MultipartFile 文件校验文件格式
后台项目经常会有文件上传功能,如果后台不做校验会有用户上传恶意文件,可能会导致上传文件类型不符合要求或者上传恶意脚本的情况导致服务器被攻击。
public static void main(String[] args) throws InterruptedException {
byte[] content = "Hello, World!".getBytes();
MultipartFile file = new MockMultipartFile("file", "hello.txt", "text/plain", content);
final HashSet<String> imageSuffix = new HashSet<>(Arrays.asList("jpg", "jpeg", "gif", "png", "webp"));
// 文件的原始名称
String fileName = file.getOriginalFilename();
if (fileName == null) {
throw new ServiceException("文件名称不能为空");
}
// 解析出文件后缀
int index = fileName.lastIndexOf(".");
if (index == -1) {
throw new ServiceException("文件后缀不能为空");
}
// 验证文件后缀
String suffix = fileName.substring(index + 1);
if (!imageSuffix.contains(suffix.trim().toLowerCase())) {
throw new ServiceException("非法的文件类型");
}
}