Java 简易图片上传

  • 配置文件中配置静态资源路径和文件上传大小限制
# 配置静态资源的路径swrs
spring.web.resources.static-locations=file:D:/files,classpath:static
# 限制单个文件的上传大小ssmm
spring.servlet.multipart.max-file-size=100MB
# 限制多个文件的上传大小ssmm
spring.servlet.multipart.max-request-size=500MB
  • 定义负责处理文件上传请求的Controller方法

    controller.UploadController

    package cn.tedu._03vehicle.controller;
    
    import cn.tedu._03vehicle.base.response.JsonResult;
    import org.springframework.web.bind.annotation.PostMapping;
    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;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.UUID;
    
    @RestController
    @RequestMapping("/v1/file/")
    public class UploadController {
        /**
         * 1.上传文件功能
         *
         * @param file 前端提交的文件
         * @return
         * @throws IOException
         */
        @PostMapping("upload")
        public JsonResult upload(MultipartFile file) throws IOException {
            System.out.println("------------" + file);
            //最终目标: d:/files/2024/10/19/zhly.jpg
            /****************第1步:处理文件名****************/
            //原始文件名字:zhly.jpg
            String fileName = file.getOriginalFilename();
            //获取文件的后缀名[.jpg]
            String suffix = fileName.substring(fileName.lastIndexOf("."));
            //生成一个全球唯一的随机字符串,作为新的文件名
            fileName = UUID.randomUUID() + suffix;
    
            /**************第2步:处理路径**************/
            //目标: d:/files/2024/10/19/
            String dirPath = "d:/files";
            //自定义一个日期路径作为文件存储的文件夹,提高检索性能,一般以年月日的格式存储,比如:/2024/10/19
            SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/");
            //将当前的实际日期转为上面的时间格式;
            String datePath = sdf.format(new Date());
    
            /*************第3步:创建对应的目录**********/
            File dirFile = new File(dirPath + datePath);
            if (!dirFile.exists()) {
                dirFile.mkdirs();
            }
            /*************第4步:拼接文件完整路径并保存到磁盘*********/
            String filePath = dirPath + datePath + fileName;
            file.transferTo(new File(filePath));
    
            /*************第5步:返回响应*********************/
            //返回: /2024/10/19/xxx.jpg 给到前端, 前端拼接成完整的文件路径
            //完整的文件路径 http://localhost:8080/2024/10/19/xxx.jpg
            //此处没有d:/files,因为后期会把该路径设置为工程的静态文件的根路径
            return JsonResult.ok(datePath + fileName);
        }
    }
    
  1. 注意事项

  • 文件上传成功后,假如希望可以通过浏览器直接访问,需要配置静态资源路径

  • 文件上传现在是上传到本地服务器对应的地址,将来可以上传到云端,例如阿里的OSS。

  • 文件上传的大小后续需要进行限制。

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

推荐阅读更多精彩内容