关于springboot限制文件类型上传的处理方法

1,302 阅读1分钟

该方法采用sprongboot拦截器的处理方法

  1. 定义一个自定义拦截器类,在该类中实现 preHandle 方法用于拦截请求,并在其中自定义对文件类型的限制。
  2. 在拦截器中获取上传文件的类型,通过判断文件类型是否允许上传,实现限制文件类型上传的功能。
  3. 在 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.限制不同种类文件须修改的地方

image.png

只需要修改这个判断即可