有时,我们上传的文件会直接存放在本地(linux服务器)上,,现在直接开始实战:
-
依赖
org.springframework.boot spring-boot-starter-web -
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 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(GlobalConstant.FILE_MAPPING_PATH) .addResourceLocations(GlobalConstant.FILE_REAL_PATH); } } -
页面
文件上传 -
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盘存储了我们上传的图片,并且虚拟路径存进数据库[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxSvltKe-1651847407926)(…/image-20220506140347553.png)]
等下图片回显访问http://localhost:8080/file/20220506134146_test.jpg就可以显示了



