文件上传

作者: xzz4632 | 来源:发表于2019-07-09 11:35 被阅读0次

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()方法保存文件.

相关文章

网友评论

    本文标题:文件上传

    本文链接:https://www.haomeiwen.com/subject/rkvtkctx.html