Spring MVC 全注解的方式实现单个和多个文件上传
来源:互联网 发布:威纶通触摸屏编程手册 编辑:程序博客网 时间:2024/05/22 17:43
Spring MVC 全注解的方式实现单个和多个文件上传,文件上传限定文件的类型,spring mvc中 @InitBinder 对文件进行绑定,确定是单文件还是多文件上传。
message 的实体类,在HelloWorldConfiguration中自动装配,
CommonsMultipartResolver 限制文件上传的大小。
单文件model
package com.websystique.springmvc.model;
import org.springframework.web.multipart.MultipartFile;
public class FileBucket {
MultipartFile file;public MultipartFile getFile() { return file;}public void setFile(MultipartFile file) { this.file = file;}
}
多文件model 放到list集合当中
package com.websystique.springmvc.model;
import java.util.ArrayList;
import java.util.List;
public class MultiFileBucket {
List<FileBucket> files = new ArrayList<FileBucket>();public MultiFileBucket(){ files.add(new FileBucket()); files.add(new FileBucket()); files.add(new FileBucket());}public List<FileBucket> getFiles() { return files;}public void setFiles(List<FileBucket> files) { this.files = files;}
}
文件上传的controller
package com.websystique.springmvc.controller;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.FileCopyUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import com.websystique.springmvc.model.FileBucket;
import com.websystique.springmvc.model.MultiFileBucket;
import com.websystique.springmvc.util.FileValidator;
import com.websystique.springmvc.util.MultiFileValidator;
@Controller
public class FileUploadController {
private static String UPLOAD_LOCATION="E:/study/Test_Workspace/Spring4MVCFileUploadCommonsExample/src/main/webapp/upload/";@AutowiredFileValidator fileValidator;@AutowiredMultiFileValidator multiFileValidator;@InitBinder("fileBucket")//绑定数据类型protected void initBinderFileBucket(WebDataBinder binder) { binder.setValidator(fileValidator);}@InitBinder("multiFileBucket")protected void initBinderMultiFileBucket(WebDataBinder binder) { binder.setValidator(multiFileValidator);}@RequestMapping(value={"/","/welcome"}, method = RequestMethod.GET)public String getHomePage(ModelMap model) { return "welcome";}@RequestMapping(value="/singleUpload", method = RequestMethod.GET)public String getSingleUploadPage(ModelMap model) { FileBucket fileModel = new FileBucket(); model.addAttribute("fileBucket", fileModel); return "singleFileUploader";}@RequestMapping(value="/singleUpload", method = RequestMethod.POST)public String singleFileUpload(@Valid FileBucket fileBucket, BindingResult result, ModelMap model) throws IOException { if (result.hasErrors()) { System.out.println("validation errors"); return "singleFileUploader"; } else { System.out.println("Fetching file"); MultipartFile multipartFile = fileBucket.getFile(); //Now do something with file... FileCopyUtils.copy(fileBucket.getFile().getBytes(), new File(UPLOAD_LOCATION + fileBucket.getFile().getOriginalFilename())); String fileName = multipartFile.getOriginalFilename(); model.addAttribute("fileName", fileName); return "success"; }}@RequestMapping(value="/multiUpload", method = RequestMethod.GET)public String getMultiUploadPage(ModelMap model) { MultiFileBucket filesModel = new MultiFileBucket(); model.addAttribute("multiFileBucket", filesModel); return "multiFileUploader";}@RequestMapping(value="/multiUpload", method = RequestMethod.POST)public String multiFileUpload(@Valid MultiFileBucket multiFileBucket, BindingResult result, ModelMap model) throws IOException { if (result.hasErrors()) { System.out.println("validation errors in multi upload"); return "multiFileUploader"; } else { System.out.println("Fetching files"); List<String> fileNames= new ArrayList<String>(); //Now do something with file... for(FileBucket bucket : multiFileBucket.getFiles()){ FileCopyUtils.copy(bucket.getFile().getBytes(), new File(UPLOAD_LOCATION + bucket.getFile().getOriginalFilename())); fileNames.add(bucket.getFile().getOriginalFilename()); } model.addAttribute("fileNames", fileNames); return "multiSuccess"; }}
}
Spring mvc 的web-severlet 的配置(注解)
package com.websystique.springmvc.configuration;
import java.io.IOException;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = “com.websystique.springmvc”)
public class HelloWorldConfiguration extends WebMvcConfigurerAdapter{
@Bean(name="multipartResolver") public CommonsMultipartResolver getResolver() throws IOException{ CommonsMultipartResolver resolver = new CommonsMultipartResolver(); //Set the maximum allowed size (in bytes) for each individual file. resolver.setMaxUploadSizePerFile(5242880);//5MB //You may also set other available properties. return resolver;}@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); registry.viewResolver(viewResolver);}@Beanpublic MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("messages"); return messageSource;}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("/static/");}
}
Spring MVC 配置(注解)
package com.websystique.springmvc.configuration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class HelloWorldInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Overrideprotected Class<?>[] getRootConfigClasses() { return new Class[] { HelloWorldConfiguration.class };}@Overrideprotected Class<?>[] getServletConfigClasses() { return null;}@Overrideprotected String[] getServletMappings() { return new String[] { "/" };}
}
工具类 单文件验证 fileUtil
package com.websystique.springmvc.util;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import com.websystique.springmvc.model.FileBucket;
@Component
public class FileValidator implements Validator {
public boolean supports(Class<?> clazz) { return FileBucket.class.isAssignableFrom(clazz);}public void validate(Object obj, Errors errors) { FileBucket file = (FileBucket) obj; if(file.getFile()!=null){ if (file.getFile().getSize() == 0) { errors.rejectValue("file", "missing.file"); } }}
}
多文件验证
package com.websystique.springmvc.util;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import com.websystique.springmvc.model.FileBucket;
import com.websystique.springmvc.model.MultiFileBucket;
@Component
public class MultiFileValidator implements Validator {
public boolean supports(Class<?> clazz) { return MultiFileBucket.class.isAssignableFrom(clazz);}public void validate(Object obj, Errors errors) { MultiFileBucket multiBucket = (MultiFileBucket) obj; int index=0; for(FileBucket file : multiBucket.getFiles()){ if(file.getFile()!=null){ if (file.getFile().getSize() == 0) { errors.rejectValue("files["+index+"].file", "missing.file"); } } index++; }}
}
pom.xml 文件配置
- Spring MVC 全注解的方式实现单个和多个文件上传
- mvc多个文件上传和单个文件上传
- mvc多个文件上传和单个文件上传
- struts2实现单个和多个文件的上传
- Spring MVC 上传单个文件
- Spring MVC 单个文件上传
- 使用commons-fileupload实现单个和多个文件上传
- 使用commons-fileupload实现单个和多个文件上传
- 使用commons-fileupload实现单个和多个文件上传
- 使用commons-fileupload实现单个和多个文件上传
- VB中用inet控件通过FTP实现单个文件和多个文件的上传
- ajaxfileupload实现单个或多个文件的上传
- spring上传单个文件与多个文件
- spring boot 单个或多个文件上传
- Spring MVC实现文件的上传和下载的功能
- 使用html+ajax+formdata+SpringMVC实现单个文件,和多个文件上传功能
- 使用html+ajax+formdata+SpringMVC实现单个文件,和多个文件上传功能
- Struts2:单个文件上传的两种实现方式
- 20151008
- NOIP提高组2006 金明的预算方案
- HDU 1166 敌兵布阵【线段树】
- catalina.out文件过大
- CMake 基本使用方法--写CMakeList.txt
- Spring MVC 全注解的方式实现单个和多个文件上传
- performSelector多参数
- Contains Duplicate II
- LA4015 Caves
- markdown字体字号背景色
- LeetCode---Remove Nth Node From End of List
- 杨辉三角python实现
- Apple Watch如何进行真机调试及问题汇总
- Linux Epoll介绍和程序实例