springMVC图片上传

思路

  1. 首先检查文件后缀是否是合法(比如.png,.jpg),列出对应的媒体类型(image/png,image/jpeg)
  2. 检查文件的内容是否是图片,防止破坏者将脚本后缀改为图片格式,图片是有宽和高的
  3. 保存到图片服务器,比如fastDFS图片存储服务器
  4. 回显Url(本案例将本地作为图片存储服务器,本地配置了一个域名,使用nginx代理到存储目录)

实例代码


@Service
public class UploadServiceImpl implements UploadService {
    //保存日志的对象   
    private static final Logger logger = LoggerFactory.getLogger(UploadController.class);
 
    // 允许存储的文件类型白名单
    private static final List<String> suffixes = Arrays.asList("image/png", "image/jpeg");
 
    public String upload(MultipartFile file) {
        try {
            
            // 校验文件类型
            String type = file.getContentType();
            if (!suffixes.contains(type)) {
                  //此处的{}相当于字符串的占位符
                logger.info("上传失败,文件类型不匹配:{}", type);
                return null;
            }
            // 校验图片内容
            BufferedImage image = ImageIO.read(file.getInputStream());
            if (image == null) {
                logger.info("上传失败,文件内容不符合要求");
                return null;
            }
            
            // 生成保存目录
            File dir = new File("G:\LeYou\upload");
            if (!dir.exists()) {
                dir.mkdirs();
            }
            //保存图片,第一个参数是路径,第二个参数是文件名,使用MultipartFile file获取源文件文件名
            file.transferTo(new File(dir, file.getOriginalFilename()));
 
            // 拼接图片地址,
            String url = "http://image.leyou.com/upload/" + file.getOriginalFilename();
 
            return url;
        } catch (Exception e) {
            return null;
        }
    }
}
原文地址:https://www.cnblogs.com/treasury/p/12872321.html