zoukankan      html  css  js  c++  java
  • springmvc上传图片《2》

    创建springboot项目

    编写配置

    server:
      port: 8082
    spring:
      application:
        name: upload-service
      servlet:
        multipart:
          max-file-size: 5MB # 限制文件上传的大小

    需要注意的是,我们应该添加了限制文件大小的配置

    controller

    编写controller需要知道4个内容:

    • 请求方式:上传肯定是POST
    • 请求路径:/upload/image
    • 请求参数:文件,参数名是file,SpringMVC会封装为一个接口:MultipleFile
    • 返回结果:上传成功后得到的文件的url路径 
    @RestController
    @RequestMapping("upload")
    public class UploadController {
    
        @Autowired
        private UploadService uploadService;
    
        /**
         * 上传图片功能
         * @param file
         * @return
         */
        @PostMapping("image")
        public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) {
            String url = this.uploadService.upload(file);
            if (StringUtils.isBlank(url)) {
                // url为空,证明上传失败
                return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
            }
            // 返回200,并且携带url路径
            return ResponseEntity.ok(url);
        }
    }

    service

    在上传文件过程中,我们需要对上传的内容进行校验:

    1. 校验文件大小
    2. 校验文件的媒体类型
    3. 校验文件的内容

    文件大小在Spring的配置文件中设置,因此已经会被校验,我们不用管。

    @Service
    public class 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 {
                // 1、图片信息校验
                // 1)校验文件类型
                String type = file.getContentType();
                if (!suffixes.contains(type)) {
                    logger.info("上传失败,文件类型不匹配:{}", type);
                    return null;
                }
                // 2)校验图片内容
                BufferedImage image = ImageIO.read(file.getInputStream());
                if (image == null) {
                    logger.info("上传失败,文件内容不符合要求");
                    return null;
                }
                // 2、保存图片
                // 2.1、生成保存目录
                File dir = new File("D:\heima\upload");
                if (!dir.exists()) {
                    dir.mkdirs();
                }
                // 2.2、保存图片
                file.transferTo(new File(dir, file.getOriginalFilename()));
    
                // 2.3、拼接图片地址
                String url = "http://image.leyou.com/upload/" + file.getOriginalFilename();
    
                return url;
            } catch (Exception e) {
                return null;
            }
        }
    }
  • 相关阅读:
    SQL经常使用语法
    【LeetCode】Generate Parentheses 解题报告
    Linux进程间通信(IPC)
    Android菜单menu控件大全
    Android入门常见问题
    c++ struct与class的差别
    hdu 2011 多项式求和
    Android安全机制介绍
    HDOJ 4003 Find Metal Mineral
    HDU 2845 Beans (两次线性dp)
  • 原文地址:https://www.cnblogs.com/coder-lzh/p/9747914.html
Copyright © 2011-2022 走看看