spring boot 拦截器图片格式校验

创建图片格式校验拦截器 ImageSupportInterceptor 继承 HandlerInterceptorAdapter

代码如下:

import cn.hutool.json.JSONUtil;
import com.cdc.iss.icsp.crawler.wordchecker.meta.Result;
import com.cdc.iss.icsp.crawler.wordchecker.util.ResultUtil;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Iterator;
import java.util.List;

@Slf4j
@Component
public class ImageSupportInterceptor extends HandlerInterceptorAdapter  {
    //只支持jpg和jpeg
    private final static String IMAGE_SUFFIX_SUPPORT = "jpg,jpeg";

    @Resource
    private MultipartResolver multipartResolver;
    @Override
    public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler) throws Exception {
        boolean multipart = this.multipartResolver.isMultipart(request);
        if (multipart) {
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            List<MultipartFile> files = multipartRequest.getFiles("file");
            if (!files.isEmpty()) {
                for (MultipartFile file : files) {
                    try (ImageInputStream imageInputStream = ImageIO.createImageInputStream(file.getInputStream())) {
                        Iterator<ImageReader> imageReaders = ImageIO.getImageReaders(imageInputStream);
                        while (imageReaders.hasNext()) {
                            ImageReader next = imageReaders.next();
                            String formatName = next.getFormatName();
                            if (!supportImage(formatName)) {
                                Result<?> result = ResultUtil.result(400, formatName + "图片类型不支持!");
                                response.setContentType("application/json;charset=utf-8");
                                response.getWriter().println(JSONUtil.toJsonStr(result));
                                return false;
                            }
                            next.dispose();
                        }
                    }
                }
            }
        }
        return super.preHandle(request, response, handler);
    }

    private boolean supportImage(String suffix) {
        return IMAGE_SUFFIX_SUPPORT.contains(suffix);
    }
}

配置拦截器:

import com.cdc.iss.icsp.crawler.wordchecker.interceptor.ImageSupportInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.annotation.Resource;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Resource
    private ImageSupportInterceptor imageSupportInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(imageSupportInterceptor);
        WebMvcConfigurer.super.addInterceptors(registry);
    }

}

图片上传:

import com.cdc.iss.icsp.crawler.wordchecker.meta.Result;
import com.cdc.iss.icsp.crawler.wordchecker.util.ResultUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@RestController
@RequestMapping("/image")
public class ImageController {

    @GetMapping("/upload")
    public Result<?> check(MultipartFile file) throws IOException {
        System.out.println(file.getBytes().length);
        file.transferTo(new File("C:\\Users\\admin\\image\\sdakfhaj.jpg"));
        return ResultUtil.ok(file.getOriginalFilename());
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容