该方法采用sprongboot拦截器的处理方法
- 定义一个自定义拦截器类,在该类中实现 preHandle 方法用于拦截请求,并在其中自定义对文件类型的限制。
- 在拦截器中获取上传文件的类型,通过判断文件类型是否允许上传,实现限制文件类型上传的功能。
- 在 Spring Boot 应用程序中配置拦截器,将自定义的拦截器实例添加到拦截器链中。
1.创建一个文件限制拦截器
@Component
public class FileTypeInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request instanceof MultipartHttpServletRequest) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Iterator<String> fileNames = multipartRequest.getFileNames();
while (fileNames.hasNext()){
String param = fileNames.next();
List<MultipartFile> files = multipartRequest.getFiles(param);
for (MultipartFile file : files) {
String fileName = file.getOriginalFilename();
String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);
if (fileExtension.equals("docx")){
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("{\n" +
" \"code\": -1,\n" +
" \"msg\": \"无法上传类型为"+fileExtension+"的文件\",\n" +
" \"token\": null,\n" +
" \"data\": null,\n" +
" \"flag\": null\n" +
"}");
return false;
}
}
}
}
return true;
}
}
将拦截器配置到 Spring Boot 应用程序中
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private FileTypeInterceptor fileTypeInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(fileTypeInterceptor).addPathPatterns("/**");
}
}
3.限制不同种类文件须修改的地方
只需要修改这个判断即可