此前我们介绍过HTTP的multipart/form-data请求:
通过multipart/form-data请求可以方便的实现客户端到服务端的文件上传服务,但是默认的DispatcherServlet并不支持multipart/form-data请求,需要手动配置来启用multipart/form-data请求
javaconfiguration配置
AbstractAnnotationConfigDispatcherServletInitializer将DispatcherServlet注册到Servlet容器后,会生成一个ServletRegistration.Dynamic对象,并用这个对象调用customizeRegistration方法
通过复写customizeRegistration方法可以进行对DispatcherServlet进行额外的配置
package com.techlog.test.configuration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration;
/**
* DispatcherServlet 初始化配置
* Created by techlog on /11/17.
*/
public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* @return Spring 应用上下文配置类
*/
@Override
protected Class>[] getRootConfigClasses() {
return new Class>[] { RootConfig.class };
}
/**
* @return Servlet Web 上下文配置类
*/
@Override
protected Class>[] getServletConfigClasses() {
return new Class>[] { WebConfig.class };
}
/**
* @return 匹配的 URL 模式
*/
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setMultipartConfig(new MultipartConfigElement("/tmp/techlog/uploads"));
}
}
这里我们调用setMultipartConfig方法启用了multipart请求的处理,并将/tmp/techlog/uploads目录设为了上传文件接收目录
通过MultipartConfigElement的不同构造器我们除上传路径这个必须参数外,还可以指定其他可选的限制条件:上传文件的最大容量(Byte)
整个multipart请求的最大容量(Byte)
上传文件大小(Byte)大于某个阈值则写入磁盘,否则保存在内存中,默认为0
web.xml配置
/p>
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"/dtd/web-app_2_3.dtd" >
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
appServlet
/*
appServlet
org.springframework.web.servlet.DispatcherServlet
1
/tmp/techlog/uploads
2097152
4194304