有时,我们上传的文件会直接存放在本地(linux服务器)上,现在直接开始实战:
-
依赖
<!-- mvc的自动配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
-
yml配置,配置文件上传大小限制,因为其默认限制是1mb,所以上传文件稍大就会失败
# 设置内置Tomcat请求大小为20MB server.tomcat.max-http-form-post-size=20MB # 设置请求最大大小为20MB spring.servlet.multipart.max-request-size=20MB # 设置文件上传最大大小为20MB spring.servlet.multipart.max-file-size=20MB
-
设置全局常量以及配置mvc映射
public class GlobalConstant { //上传文件路径 public static final String FILE_REAL_PATH = "file:d:/file/"; //映射路径 public static final String FILE_MAPPING_PATH = "/file/**"; //映射路径前缀 public static final String FILE_MAPPING_PATH_PREFIX ="/file/"; } @Configuration public class MvcConfig implements WebMvcConfigurer { /** * 设置上传文件映射 * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(GlobalConstant.FILE_MAPPING_PATH) .addResourceLocations(GlobalConstant.FILE_REAL_PATH); } }
-
页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form enctype="multipart/form-data" method="POST" action="/sysFile/upload"> <input type="file" name="file" /> <input type="submit" value="upload" /> </form> </body> </html>
-
controller
@Controller @RequestMapping("/sysFile") public class SysFileController { @Autowired private ISysFileService fileService; @GetMapping("/toFilePage") public String toFilePage(){ return "file"; } @PostMapping("/upload") @ResponseBody public AjaxResult upload(@RequestParam(value = "file", required = true) MultipartFile file) throws Exception { //文件不为空 if(file.isEmpty()){ throw new ServiceException("上传文件不能为空"); } //真实上传路径是否存在,不存在创建该路径 File fileRealPath = new File(GlobalConstant.FILE_REAL_PATH); if(!fileRealPath.exists()){ fileRealPath.mkdirs(); } //开始处理上传文件 String fileName = file.getOriginalFilename(); String newFileName = getTime()+ "_" + fileName; file.transferTo(new File(fileRealPath, newFileName)); //把虚拟路径存进数据库 SysFile sysFile = new SysFile(); sysFile.setFileName(fileName); sysFile.setFileUrl(GlobalConstant.FILE_MAPPING_PATH_PREFIX + newFileName); fileService.save(sysFile); return AjaxResult.suc(); } //新图片名称前缀 public String getTime(){ String curTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); return curTime; } }
准备完成之后,访问http://localhost:8080/sysFile/toFilePage,上传我们的图片,可以看到D盘存储了我们上传的图片,并且虚拟路径存进数据库
等下图片回显访问http://localhost:8080/file/20220506134146_test.jpg就可以显示了