一:使用CommonsMultipartResolver
需要在配置文件里面配置
@Bean
public MultipartResolver multipartResolver() throws IOException{
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
//这个地址 会在 workspace 上级目录下 自动建立: 意思就是这个目录会和workspace同一级别
//比如 我的workspace是D:\\javaEEDevSpace
//那这tmp的目录就是:D:\\tmp\\spittr\\uploads
multipartResolver.setUploadTempDir(new FileSystemResource("/tmp/spittr/uploads"));
multipartResolver.setMaxInMemorySize(0);
multipartResolver.setMaxUploadSize(30*1024*1024);
return multipartResolver;
}
除了上面的配置之外还需要2个jar包,commons-io和commons-fileupload
二:使用StandardServletMultipartResolver
使用
StandardServletMultipartResolver的需要在servelt3.0及以上的环境才行,并且需要重写AbstractAnnotationConfigDispatcherServletInitializer里面的
customizeRegistration()方法,代码如下:
@Override
protected void customizeRegistration(Dynamic registration) {
// TODO Auto-generated method stub
//第一是临时接收上传文件的地址
//第二个是单个文件的最大值
//第三个是一次请求中的最大值
//只有在3.0以上包括3.0的servlet才能用
//目录必须先存在,不然会报错
File file = new File("d:/tmp/spittr/uploads");
if(!file.exists()){
file.mkdirs();
}
MultipartConfigElement multipartConfigElement = new MultipartConfigElement(file.getAbsolutePath(), 2*1024*1024, 4*1024*1024, 0);
registration.setMultipartConfig(multipartConfigElement);
super.customizeRegistration(registration);
}
临时
目录一定要存在在行,不然会报错,而使用CommonsMultipartResolver的话却不会,CommonsMultipartResolver会自动创建
处理上传文件的代码如下:
@RequestMapping(value = "/register",method=RequestMethod.POST) public String processRegister(@RequestPart("profilePicture") MultipartFile profilePicture, @ModelAttribute @Valid Spitter spitter,BindingResult errors,Model model) throws IllegalStateException, IOException{ //request.setCharacterEncoding("GBK"); if(errors.hasErrors()){ model.addAttribute("spitter", spitter); System.out.println("hasErrors..."); return "register"; } System.out.println(profilePicture.getContentType()); System.out.println(profilePicture.getName()); System.out.println(profilePicture.getOriginalFilename()); System.out.println(profilePicture.getSize()); File dir = new File("D:\\javaEEDev\\upload"); if(!dir.exists()){ dir.mkdirs(); } File file = new File(dir, profilePicture.getOriginalFilename()); profilePicture.transferTo(file); System.out.println(spitter.toString()); spitterRepository.save(spitter); return "redirect:/spitter/"+URLEncoder.encode(spitter.getUsername(), "UTF-8"); //return "redirect:/spitter/"+spitter.getUsername(); }