文件上传

作者: 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