zoukankan      html  css  js  c++  java
  • springboot处理单个文件上传

    1. 引入pom.xml

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
        </dependencies>
    

    2. 编写application.yml

    server:
      port: 8082
    spring:
      application:
        name: upload-service
      servlet:
        multipart:
          max-file-size: 5MB
    

    3. 编写UploadService

    package com.leyou.upload.service;
    
    import com.leyou.upload.controller.UploadController;
    import org.apache.commons.lang.time.DateFormatUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.List;
    import java.util.UUID;
    
    /**
     * @author john
     * @date 2019/11/30 - 15:20
     */
    @Service
    public class UploadService {
        private static final Logger LOGGER = LoggerFactory.getLogger(UploadController.class);
    
        //设置文件的contentType
        private static final List<String> CONTENT_TYPES = Arrays.asList("image/jpg", "image/jpeg", "image/gif");
    
        //设置文件存储的基路径
        private static final String BASE_PATH = "D:\imooc\project\images\";
    
        //设置文件返回的url
        private static final String IMAGE_URL = "http://image.leyou.com/";
    
        public String uploadImage(MultipartFile file) {
            String originalFilename = file.getOriginalFilename();
            String contentType = file.getContentType();
    
            String ext = null;
            if (originalFilename == null || !originalFilename.contains(".")) {
                //图片名错误直接返回
                return null;
            }
    
            ext = originalFilename.substring(originalFilename.lastIndexOf("."));
    
            // 1. 文件类型
            if (contentType == null) {
                LOGGER.info("文件{}获取不到contentType", originalFilename);
                return null;
            }
    
            if (!CONTENT_TYPES.contains(contentType.toLowerCase())) {
                LOGGER.info("文件上传失败: {},文件类型{}不合法", originalFilename, contentType);
                return null;
            }
    
            try {
                // 2. 校验文件的内容
                BufferedImage bufferImage = ImageIO.read(file.getInputStream());
                if (bufferImage == null || bufferImage.getWidth() <= 0 || bufferImage.getHeight() <= 0) {
                    LOGGER.info("文件上传失败: {},文件内容不合法", originalFilename);
                    return null;
                }
    
                //设置文件上传后的生成的新名字
                String uuid = UUID.randomUUID().toString().replaceAll("-", "");
                String newfileName = uuid + ext;
    
                //设置上传图片的实际存储目录
                String dirPath = DateFormatUtils.format(new Date(), "yyyyMMdd");
                String filepath = BASE_PATH + File.separator + dirPath;
    
                //创建新路径文件夹
                File targetFile = new File(filepath);
                if (!targetFile.exists()) {
                    targetFile.mkdirs();
                }
    
                // 3. 保存到服务器
                file.transferTo(new File(filepath + File.separator + newfileName));
                // 4. 返回url路径
    
                return IMAGE_URL + dirPath + File.separator + newfileName;
            } catch (IOException e) {
                e.printStackTrace();
                LOGGER.info("文件{}上传失败:服务器异常 {}", originalFilename, e.getMessage());
                return null;
            }
        }
    }
    
    
    

    3. 编写UploadController

    package com.leyou.upload.controller;
    
    import com.leyou.upload.service.UploadService;
    import org.apache.commons.lang.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.multipart.MultipartFile;
    
    
    /**
     * @author john
     * @date 2019/11/30 - 15:18
     */
    @Controller
    @RequestMapping("upload")
    public class UploadController {
        @Autowired
        private UploadService uploadService;
    
    
        @PostMapping("image")
        public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) {
            String url = uploadService.uploadImage(file);
    
            if (StringUtils.isBlank(url)) {
                return ResponseEntity.badRequest().build();
            }
    
            return ResponseEntity.status(HttpStatus.CREATED).body(url);
        }
    }
    
    

    测试上传

  • 相关阅读:
    开启gpu加速的高性能移动端相框组件!
    一看就懂得移动端rem布局、rem如何换算
    加密算法
    YDNKJS 笔记
    JavaScript函数
    测试下
    console前端代码自动删除QQ空间我的说说
    前端规范
    解决方案
    重读js高程笔记二
  • 原文地址:https://www.cnblogs.com/ifme/p/11963261.html
Copyright © 2011-2022 走看看