1,文件上传要求

文件上传的三个必要前提:

  • 表单提交方式必须为post
  • 表单的enctype属性值必须为mutipart/form-data
  • 表单必须有一个文件上传的按钮

文件上传的原理简单分析:

  • 当表单的enctype属性的取值为默认值时,请求体内容为一组键值对:
    • key=value&key=value&key=value….
  • 当表单的enctype属性的取值为mutilpart/form-data后,请求体内容就变成:
    • 每一部分都是MIME类型描述的正文

2,SpringMVC接收上传过来的文件

①导入坐标

  1. <dependency>
  2. <groupId>commons-fileupload</groupId>
  3. <artifactId>commons-fileupload</artifactId>
  4. <version>1.3.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>commons-io</groupId>
  8. <artifactId>commons-io</artifactId>
  9. <version>2.4</version>
  10. </dependency>

②配置文件解析器

  1. <!--配置文件上传解析器
  2. 注意:id必须为multipartResolver
  3. -->
  4. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  5. <!--设置默认字符编码-->
  6. <property name="defaultEncoding" value="utf-8"/>
  7. <!--一次请求上传的文件的总大小的最大值,单位是字节-->
  8. <property name="maxUploadSize" value="#{1024*1024*1000}"/>
  9. <!--每个上传文件大小的最大值,单位是字节-->
  10. <property name="maxUploadSizePerFile" value="#{1024*1024*50}"/>
  11. </bean>

③表单页面

<form action="/login" method="post">
    <input type="text" name="name"><br>
    <input type="password" name="password"><br>
    <input type="submit">
</form>

④控制器

@RequestMapping("/upload")
    public String load(MultipartFile load) throws IOException {
        load.transferTo(new File("test.txt"));
        return "forward:/static/ok.html";
    }

注意:表单中,name的名字要和控制器的方法参数名一致。

3,MultipartFile的常见用法

  • 获取上传文件的原名

    String originalFilename = load.getOriginalFilename();
    
  • 获取文件类型的MIME类型

    String contentType = load.getContentType();
    
  • 获取上传文件的大小

    long size = load.getSize();
    
  • 获取对应上传文件的输入流

    InputStream inputStream = load.getInputStream();