文件上传
2019-07-09 本文已影响0人
xzz4632
1. 文件上传实现
spring提供了两种实现:
-
CommonsMultipartResolver
:
基于Apache Commons FileUpload的实现. -
StandardServletMultipartResolver
:
基于Servlet 3.0的实现
2. 配置
2.1 基于Apache Commons fileupload的实现
2.1.1 引入commons-fileupload
依赖.
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
2.1.2 配置
声明CommonsMultipartResolver
bean.
bean的id为multipartResolver
.通过它的属性设置相关参数.
- maxUploadSize: 上传文件的最大大小.
- uploadTempDir: 存储文件夹, 默认为servlet容器的临时文件夹.
- maxInMemorySize: 写入磁盘前可存储在内存中的最大大小.
2.2 基于Servlet 3.0的实现
2.2.1 依赖
无需引入其他依赖.
2.2.2 配置
-
声明
StandardServletMultipartResolver
bean.
bean的id为multipartResolver
.
这个bean没有构造函数参数, 也没有其他额外要配置的属性. -
文件限制参数配置
如果是基于xml配置, 则在web.xml
中的<servlet>
元素中配置<multipart-config>
元素.
<multipart-config>
<file-size-threshold></file-size-threshold>
<!--文件上传路径, 此上传方式强制要有-->
<location></location>
<!--上传文件的最大大小(字节), 默认没有限制-->
<max-file-size></max-file-size>
<!--整个请求的最大容量(字节), 默认无限制-->
<max-request-size></max-request-size>
</multipart-config>
如果是基于Java的配置, 配置如下:
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration.Dynamic;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected void customizeRegistration(Dynamic registration) {
//通过MultipartConfigElement的构造函数设置与xml配置中相同的参数配置
MultipartConfigElement e = new MultipartConfigElement("");
registration.setMultipartConfig(e);
}
}
注:cutomizeRegistration
方法是在AbstractDispatcherServletInitializer
类中定义的.
3. 处理文件
3.1 接收文件
通过MultipartFile
类型的对象来接收文件.
3.2 保存文件
通过MultipartFile
对象的transferTo()
方法保存文件.