基于SpringBoot的文件上传

前端控制器

@PostMapping("/upload")

public ApiDto.Responseup(MultipartFile certificationImg) {

String msg = ImageUtil.imageProcessing(certificationImg);

    return ApiDto.Response.success(msg);

}


业务层

public class ImageUtil {

public static StringimageProcessing(MultipartFile certificationImg) {

//图片类型校验

        String filename = certificationImg.getOriginalFilename().toLowerCase();

        if (!filename.matches("^.+\\.(png|jpg|gif)$")) {

return "上传照片格式错误";

        }

try {

BufferedImage bi = ImageIO.read(certificationImg.getInputStream());

          Integer width = bi.getWidth();

          Integer height = bi.getHeight();

            if (width==0||height==0) {

return "上传的照片有误,请检查重试";

            }

}catch (Exception e) {

e.printStackTrace();

            return "上传的照片有误,请检查重试";

        }

//生成图片存储目录

        String dateDir;

        dateDir =new SimpleDateFormat("yyyy/MM/dd/").format(new Date());

        String path="";

        try {

//String uploadDir= ResourceUtils.getURL("classpath:").getPath()+"resources/imgs/";

            String uploadDir="resources/";

            path = uploadDir + dateDir;

            //指定文件目录

            File dir =new File(path);

            if (!dir.exists()) {

dir.mkdirs();

            }

}catch (Exception e){

e.printStackTrace();

            return "文件目录异常";

        }

//随机生成图片名

        String uuid = UUID.randomUUID().toString();

        String fileType = filename.substring(filename.lastIndexOf("."));

        String realFileName = uuid + fileType;

        String realPath = path + realFileName;

        System.out.println(realPath);

        //上传图片

        File file =new File(realPath);

        try {

//第一种写法,无法很好的支持动态路径

            //certificationImg.transferTo(file);

            //第二种写法,本质上还是上传后复制,会占用两次空间

            // FileUtils.copyInputStreamToFile(certificationImg.getInputStream(), file);

            //第三种写法,直接写入

            byte[] bytes = certificationImg.getBytes();

            Path rpath = Paths.get(realPath);

            Files.write(rpath,bytes);

        }catch (IllegalStateException | IOException e) {

e.printStackTrace();

        }

return realPath;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文件上传方式:1.直接上传到应用服务器(速度,容量) 2.上传到oss(内容存储服务器)(阿里云,七牛云)3.前端...
    六年的承诺阅读 1,805评论 0 4
  • 项目中需要上传图片可谓是经常遇到的需求,本文将介绍 3 种不同的图片上传方式。 1.云储存 常见的 七牛云,OSS...
    m小萌同学阅读 674评论 0 1
  • 文件上传的三种方法 直接上传到应用服务器 上传到OSS(阿里云 七牛云) 前端将图片转成Base64编码上传 Sp...
    Rebirth_914阅读 1,305评论 0 16
  • 上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等。 主要有以下几种方式 直接上传到应用服务器 上传...
    yu_liu阅读 1,831评论 0 0
  • 1.1.2 区块链技术理念 区块链的技术理念,其实就是大家共同来参与记账,通过一种规则(共识算法)不断地选出账务打...
    冉冉升起的沙丁鱼阅读 418评论 0 0