使用JavaConfig方式实现Spring MVC上传文件
在项目的初始化类继承org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer抽象类并且实现customizeRegistration(…) 方法。
@Override protected void customizeRegistration(ServletRegistration.Dynamic registration) { super.customizeRegistration(registration); // 上传文件的存放位置 String filepath = "D:\\JavaProject\\SpringDemo\\SpringMVC03\\src\\main\\webapp\\uploads"; // 单个文件最大大小限制 Long singleMax = (long) (5 * Math.pow(2, 20)); // 多个文件的最大总大小限制 Long totalMax = (long) (10 * Math.pow(2, 20)); registration.setMultipartConfig( new MultipartConfigElement(filepath, singleMax, totalMax, 0)); }
声名name为multipartResolver的Bean
@Bean(name = "multipartResolver") public MultipartResolver multipartResolver() throws IOException { /* 需要导入第三方依赖 CommonsMultipartResolver resolver = new CommonsMultipartResolver(); // 临时目录,请求完成后临时文件会被删除 resolver.setUploadTempDir(new FileSystemResource("d:\\tmp\\jackaroo\\uploads")); resolver.setMaxUploadSize(2097152); resolver.setMaxInMemorySize(0); */ /*高版本的Spring和Servlet容器中使用此方式,不需要导入第三方依赖*/ StandardServletMultipartResolver resolver = new StandardServletMultipartResolver(); return resolver; }
三种方式实现文件上传
/*使用Servlet中的HttpServletRequest,但是需要依赖Servlet容器,耦合性较大(不推荐使用)*/ @RequestMapping("/upload") public ModelAndView upload(HttpServletRequest request) { // 进行转换 MultipartHttpServletRequest mhsr = (MultipartHttpServletRequest) request; // 获得请求上传的文件 MultipartFile file = mhsr.getFile("file"); // 设置视图为JSON视图 ModelAndView mv = new ModelAndView(); mv.setView(new MappingJackson2JsonView()); // 获取原始文件名 String fileName = file.getOriginalFilename(); // 目标文件 File dest = new File(fileName); try { // 保存文件 file.transferTo(dest); // 保存成功 mv.addObject("success", true); mv.addObject("msg", "上传文件成功"); } catch (IllegalStateException | IOException e) { // 保存失败 mv.addObject("success", false); mv.addObject("msg", "上传文件失败"); e.printStackTrace(); } return mv; } // 使用MultipartFile(不依赖与Servlet容器,推荐使用) @RequestMapping("/uploadMultipartFile") public ModelAndView uploadMultipartFile(MultipartFile file) { // 定义JSON视图 ModelAndView mv = new ModelAndView(); mv.setView(new MappingJackson2JsonView()); // 获取原始文件名 String fileName = file.getOriginalFilename(); file.getContentType(); // 目标文件 File dest = new File(fileName); try { // 保存文件 file.transferTo(dest); mv.addObject("success", true); mv.addObject("msg", "上传文件成功"); } catch (IllegalStateException | IOException e) { mv.addObject("success", false); mv.addObject("msg", "上传文件失败"); e.printStackTrace(); } return mv; } // 使用Part @RequestMapping(value="/uploadPart", method=RequestMethod.POST) public ModelAndView uploadPart(Part file) { ModelAndView mv = new ModelAndView(); mv.setView(new MappingJackson2JsonView()); // 获取原始文件名(javax.servlet-api 3.1.0) String fileName = file.getSubmittedFileName(); File dest = new File(fileName); try { // 保存文件 file.write("D:/JavaProject/SpringDemo/SpringMVC03/src/main/webapp/uploads/" + fileName); mv.addObject("success", true); mv.addObject("msg", "上传文件成功"); } catch (IllegalStateException | IOException e) { mv.addObject("success", false); mv.addObject("msg", "上传文件失败"); e.printStackTrace(); } return mv; }