Multipart介绍
Multipart形式的数据
Multipart格式数据会将一个表单拆分为多个部分(part),每个部分对应一个输入域。在一般的表单输入域中,它对应的部分会放置文本型数据,如果是文件上传形式,它对应的部分可以是二进制。
Multipart/form-data请求方式
Multipart/form-data是建立在HTTP的POST请求方式以上的请求,其一般用于HTTP文件上传。
所以我们需要在表单(form)元素中如下设置,使得该表单请求用于处理文件:
1 | <form class="" action="" method="post" enctype="multipart/form-data"> |
SpringMVC处理Multipart数据
Spring配置Multipart解析器
DispatcherServlet没有实现解析multipart请求数据的功能。它将任务委托给Spring中MutipartResolver策略接口实现,通过这个实现类来解析multipart请求中的内容。Spring3.1后内置两个MultipartResolver的实现供我们选择:
- CommonsMultipartResolver: 使用Jakarta Commons FileUpload解析multipart请求。
- StandardServletMultipartResolver: 依赖于Servlet3.0对multipart请求的支持。
使用CommonsMultipartResolver解析器
因为CommonsMultipartResolver依赖于Apache Commons FileUpload,所以我们需要引入commons-fileupload。
1 | <dependency> |
在SpringMVC配置文件中装载Bean即可,通过注入相关属性设置参数。
1 | <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> |
相关属性说明
| 属性名 | 说明 |
|---|---|
| defaultEncoding | 默认的解析编码,默认为iso-8859-1 |
| maxUploaadSize | 上传文件的最大大小,默认为-1(无限制) |
| maxInMemorySize | 内存缓冲区大小,超过时写入硬盘,默认为-1(无限制) |
| uploadTempDir | 临时文件目录,默认是serlvet容器的临时目录 |
使用StandardServletMultipartResolver解析器
在SpringMVC配置文件中装载Bean
1 | <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"> |
因为StandardServletMultipartResolver解析使用Servlet的处理Multipart方法处理,所以我们需要在web.xml中设置DispatcherServlet时设置相关属性
1 | <servlet> |
相关属性说明
| 属性名 | 说明 |
|---|---|
| location | 上传文件所存放的临时目录。必须指定 |
| max-file-size | 文件的最大大小,单位为字节。默认没有限制 |
| max-request-size | 请求的最大大小,单位为字节。默认没有限制) |
| file-size-threshold | 文件大小阈值,当大于这个阈值时将写入到磁盘,否则在内存中。默认值为0 |
处理multipart请求
Spring提供了MutilpartFile接口处理Mutilpart数据。接口API如下:
1 | public interface MultipartFile { |