废话不多说,直接上代码
这个是公共方法,在需要上传的接口controller中调用即可
@PostMapping("/upload")
public R upload(MultipartFile file) {
// 校验文件大小、名字、后缀
CommentMethod.uploadVerify(file);
你的业务代码
}
package cn.fox.demo.common;
import org.springframework.web.multipart.MultipartFile;
import java.util.Arrays;
import java.util.Locale;
/**
* 公共方法
*/
public class CommentMethod {
/**
* 文件后缀 支持的类型 todo 自行舍取
*/
private static final String[] FILE_SUFFIX_SUPPORT = {
".xlsx", ".xls", ".doc", ".docx", ".txt", ".csv",
".jpg", ".jpeg", ".png"};
/**
* 文件名字 需要排除的字符 todo 自行舍取
*/
private static final String[] FILE_NAME_EXCLUDE = {
"`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "=", "_", "+",
"~", "·", "!", "¥", "……", "(", ")", "——", "",
"?", ",", "<", ">", ":", ";", "[", "]", "{", "}", "/", "\\", "|",
"?", ",", "。", "《", "》", ":", ";", "【", "】", "、",
};
/**
* 文件大小 10MB todo 自行更改
*/
private static final long FILE_SIZE = 10 * 1024 * 1024;
/**
* 上传文件校验大小、名字、后缀
* @param multipartFile multipartFile
*/
public static void uploadVerify(MultipartFile multipartFile) {
// 校验文件是否为空
if (multipartFile == null) {
throw new RuntimeException("文件不能为空!");
}
// 校验文件大小
long size = multipartFile.getSize();
if(size > FILE_SIZE){
throw new RuntimeException("文件大小不能超过10MB!");
}
// 校验文件名字
String originalFilename = multipartFile.getOriginalFilename();
if (originalFilename == null) {
throw new RuntimeException("文件名字不能为空!");
}
boolean nameFlag = false;
for (String s : FILE_NAME_EXCLUDE) {
if (originalFilename.contains(s)) {
nameFlag = true;
break;
}
}
if(nameFlag){
throw new RuntimeException("文件名字不允许出现"+ Arrays.toString(FILE_NAME_EXCLUDE) +"关键字!");
}
// 校验文件后缀
if (!originalFilename.contains(".")) {
throw new RuntimeException("文件不能没有后缀!");
}
String suffix = originalFilename.substring(originalFilename.lastIndexOf('.'));
boolean flag = true;
for (String s : FILE_SUFFIX_SUPPORT) {
if (s.equals(suffix.toLowerCase(Locale.ROOT))) {
flag = false;
break;
}
}
if(flag){
throw new RuntimeException("文件格式仅限于"+ Arrays.toString(FILE_SUFFIX_SUPPORT) +"!");
}
}
}