我们在工作中经常会遇到文件上传的需求,本文使用SpringBoot简单实现文件上传。
首先Pom.xml
12 3 6org.springframework.boot 4spring-boot-starter-web 57 11 12org.springframework.boot 8spring-boot-starter-test 9test 1013 16org.springframework.boot 14spring-boot-starter-thymeleaf 15
编写Controller层
1 @Controller 2 public class FileUploadController { 3 4 private static final Logger logger = LoggerFactory.getLogger(FileUploadController.class); 5 6 /** 7 * 跳转到单个文件上传 8 * 9 * @return 10 */ 11 @RequestMapping(value = "/upload", method = RequestMethod.GET) 12 public ModelAndView upload() { 13 return new ModelAndView("/fileUpload"); 14 } 15 16 /** 17 * 跳转到多个文件上传 18 * 19 * @return 20 */ 21 @RequestMapping(value = "/upload/batch", method = RequestMethod.GET) 22 public ModelAndView batchUpload() { 23 return new ModelAndView("/multiFileUpload"); 24 } 25 26 /** 27 * 文件上传具体实现方法(单文件上传) 28 * 29 * @param file 30 * @return 31 */ 32 @RequestMapping(value = "/upload", method = RequestMethod.POST) 33 @ResponseBody 34 public String upload(@RequestParam("file") MultipartFile file) { 35 try { 36 if (file.isEmpty()) { 37 return "文件为空"; 38 } 39 // 获取文件名 40 String fileName = file.getOriginalFilename(); 41 logger.info("上传的文件名为:" + fileName); 42 // 获取文件的后缀名 43 String suffixName = fileName.substring(fileName.lastIndexOf(".")); 44 logger.info("文件的后缀名为:" + suffixName); 45 46 // 设置文件存储路径 47 String filePath = "E://xuchen//"; 48 String path = filePath + fileName + suffixName; 49 50 File dest = new File(path); 51 // 检测是否存在目录 52 if (!dest.getParentFile().exists()) { 53 dest.getParentFile().mkdirs();// 新建文件夹 54 } 55 file.transferTo(dest); 56 return "上传成功"; 57 } catch (IllegalStateException e) { 58 e.printStackTrace(); 59 } catch (IOException e) { 60 e.printStackTrace(); 61 } 62 return "上传失败"; 63 } 64 65 /** 66 * 多文件上传 67 * 68 * @param request 69 * @return 70 */ 71 @RequestMapping(value = "/upload/batch", method = RequestMethod.POST) 72 @ResponseBody 73 public String batchUpload(HttpServletRequest request) { 74 Listfiles = ((MultipartHttpServletRequest) request).getFiles("file"); 75 MultipartFile file; 76 BufferedOutputStream stream; 77 for (int i = 0; i < files.size(); ++i) { 78 file = files.get(i); 79 if (!file.isEmpty()) { 80 try { 81 byte[] bytes = file.getBytes(); 82 stream = new BufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename()))); 83 stream.write(bytes); 84 stream.close(); 85 } catch (Exception e) { 86 stream = null; 87 return "文件上传失败 " + i + " => " + e.getMessage(); 88 } 89 } else { 90 return "文件上传失败 " + i + "原因:上传文件为空!"; 91 } 92 } 93 return "文件上传成功"; 94 } 95 }
文件上传相关配置
1 @Configuration 2 public class FileUploadConfiguration { 3 4 @Bean 5 public MultipartConfigElement multipartConfigElement() { 6 MultipartConfigFactory factory = new MultipartConfigFactory(); 7 // 设置文件大小限制 ,超出设置页面会抛出异常信息, 8 // 这样在文件上传的地方就需要进行异常信息的处理了; 9 factory.setMaxFileSize("2MB"); 10 /// 设置总上传数据总大小 11 factory.setMaxRequestSize("5MB"); 12 return factory.createMultipartConfig(); 13 } 14 }
前端页面(单个上传)
1 2 3 4 518 19单个文件上传 6 7 8文件上传示例
9
10
测试结果
Demo源码下载地址: