一般如果我们需要SpringMVC能自动处理MultiPart请求,传统方法是使用xml的方式进行配置,xml文件难以维护,经典教材《Spring实战》第四版也推荐完全使用注解(Annotation)的方式来搭建Spring项目。
下面是实现纯Annotation方式实现SpringMVC的接收MultiPart请求的核心代码
1.继承AbstractAnnotationConfigDispatcherServletInitializer,用JAVA代码代替xml中的DispahcerServlet配置
AppInitializer.java
import Util.Config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration;
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/action/*"};
}
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
//上传的文件临时保存路径
String tmpdir="D:/tmp";
registration.setMultipartConfig(tmpdir);
}
}
此处通过重载customizeRegistration向项目中添加了MultipartConfig,使得项目能处理Multipart请求
2.在添加 multipartResolver的bean
@Bean
public MultipartResolver multipartResolver(){
return new StandardServletMultipartResolver();
}
这里的Resolver提供了标准的SpringMVC文件上传处理方法
3.接下来就可以处理MultiPart请求了,以下是示例代码
@ResponseBody
@RequestMapping(value = "/putres", method = RequestMethod.POST)
public void putres(@RequestPart("file") Part part, HttpServletResponse response) throws IOException {
Resource resource = ResourceUtil.PutResource(part.getInputStream(), part.getName());
//处理上传的文件
}