Spring MVC 处理form表单 上传文件1---配置

 在web应用中,用户上传有两种:文本信息和文件(照片,文件,视频等)。这里讲在Spring中(或Servlet容器中)配置好了对mutipart请求的处理,这一步是一劳永逸的;编写form上传文件,编写控制器方法处理上传的文件。编写form和controller方法是经常会用到的。
 

1.配置multipart解析器---JavaConfig

      通过Spring的MultipartResolver接口来解析multipart请求数据。在SpringMVC中,内置了两个MultipartResolver实现类来解析multipart请求。CommonsMultipartResolver和StandardServletMultipartResolver类。Servlet 3.0和Spring3.1之后,StandardServletMultipartResolver类是更优方案。这里就示例配置StandardServletMultipartResolver类。

     在Spring应用上下文中,将StandardServletMultipartResolver声明为bean。
 

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
@Configuration
@EnableWebMvc // 启用Spring MVC
@ComponentScan("spittr") // 启用组件扫描
public class WebConfig extends WebMvcConfigurerAdapter {
         //省略其它配置
	@Bean
	public MultipartResolver multipartResolver() {
		return new StandardServletMultipartResolver();
	}
}

2.自定义配置DispatcherServlet来实现multipart配置   

         通过自定义配置DispatcherServlet 来 限制StandardServletMultipartResolver的工作方式。比如:1.在文件上传的过程中,所写入的临时文件路径;2.上传文件的最大容量(以字节为单位)。默认是没有限制的;3.整个multipart请求的最大容量(以字节为单位),不会关心有多少个part以及每个part的大小。默认是没有限制的;4.在上传的过程中,如果文件大小达到了一个指定最大容量(以字节为单位),将会写入到临时文件路径中(小于这个容量,不会存)。默认值为0,也就是所有上传的文件都会写入到磁盘上。

         其实这里就可以参考 Spring MVC高级配置---JavaConfig配置 Servlet,Filter,Listener  自定义DispatcherServlet配置 。这里是配置DispatcherServlet来限制StandardServletMultipartResolver的工作方式。

         具体配置如下,示例了两种配置
 

import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration.Dynamic;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
 
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 
	  //省略其它配置
	// 自定义DispatcherServlet配置
	@Override
	protected void customizeRegistration(Dynamic registration) {
		// 配置Servlet 3.0对multipart的支持,将上传文件的临时存储目录设置在“/tmp/spittr/uploads”中
		registration.setMultipartConfig(new MultipartConfigElement("/tmp/spittr/uploads"));
		//将上传文件的临时存储目录设置在“/tmp/spittr/uploads”中,限制文件的大小不超过2MB,
		//整个请求不超过4MB,而且所有的文件都要写到磁盘中
		registration.setMultipartConfig(new MultipartConfigElement("/tmp/spittr/uploads", 2097152, 4194304, 0));
	}
 
}

PS:这种方法要保证保存文件的文件夹是存在的,否则会报错 

message Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [G:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\SpringMVCDemo\tmp\spittr\uploads] is not valid

可以手动新建这些不存在的文件夹
 

posted on 2019-08-02 16:50  dreamstar  阅读(174)  评论(0编辑  收藏  举报