- 配置文件中配置静态资源路径和文件上传大小限制
# 配置静态资源的路径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); } }
-
注意事项
文件上传成功后,假如希望可以通过浏览器直接访问,需要配置静态资源路径
文件上传现在是上传到本地服务器对应的地址,将来可以上传到云端,例如阿里的OSS。
文件上传的大小后续需要进行限制。
