Spring MVC 处理 Multipart/form-data

Multipart/form-data

  Multipart/form-data 为表单的MIME编码属性之一,共有三个值

    ① application/x-www-form-urlencoded

    ② multipart/form-data

    ③ text/plain

  ①为Html表单默认传输编码类型

  ②是表单上传的非文本的内容,传递的是文件数据,设置该属性再配合post请求方式从而实现文件上传

  ③是传输为纯文本的意思,在发邮件时要设置这种编码,拿text/plain和text/html做比较,前者用来传输纯文本文件,后者则是传递html代码的编码类型,在发送头文件时才用得上

    上述所提到的MIME,它的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务,它是一种多用途网际邮件扩充协议。通过MIME,浏览器的再请求,会告诉服务器接收的数据是什么类型

Spring MVC 处理 Multipart/form-data

       两种实现方式:

         1、CommonsMultipartResolver  :  依赖于Apache 

         2、StandardServletMultipartResolver  :  依赖于Servlet 3.0 ,SpringBoot默认支持该方式

一、配置解析器 

         1、CommonsMultipartResolver 的配置

            弊端:无法设置请求整体的最大容量

            (1)声明Bean 和 配置上传参数:

<bean id="multipartResolver" 
   class
="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="uploadTempDir" value="/temp"/>    <!--设置上传目录/temp --> <property name="maxUploadSize" value="2097152"/>   <!--最大文件容量设置为2M--> <property name="maxInMemorySize" value="0"/>    · <!--最大的内存大小设置为0,超过0就写入磁盘-->  </bean>

         2、StandardServletMultipartResolver 的配置   

            (1)声明Bean:

<bean id="multipartResolver" 
    class
="org.springframework.web.multipart.support.StandardServletMultipartResolver”>
@Bean(name = "multipartResolver")
public StandardServletMultipartResolver getStandardServletMultipartResolver(){
          return new StandardServletMultipartResolver();
}

            (2) 配置上传参数

              1、web.xml 配置

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <multipart-config>
        <!--上传到/temp 目录-->
      <location>/temp/upload</location>
        <!--文件大小为2M-->
      <max-file-size>2097152</max-file-size>
        <!--整个请求不超过4M-->
      <max-request-size>4194304</max-request-size>
        <!--大于0M的所有文件都要写入磁盘-->
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
View Code

              2、配置类中配置

@Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        //上传到/temp 目录,文件大小为2M,整个请求不超过4M,且所有文件都要写入磁盘
        registration.setMultipartConfig(new MultipartConfigElement("E:\\temp",2097152,4194304,0));
    }

      

二、Spring MVC 处理

         1、表单:

  <form action="/save" method="post" enctype="multipart/form-data">
          <input type="file" name="pic">
          <input type="submit">
   </form>

         2、MVC接收:

@RequestMapping(value = "/save",method = RequestMethod.POST)
    public String getHome(MultipartFile pic) throws IOException {
        Files.copy(pic.getInputStream(), Paths.get(ServletContext.getRealPath("/temp"),pic.getOriginalFilename));
        return null;
    }    

 

        

posted @ 2019-02-21 17:58  花中手  阅读(1183)  评论(0编辑  收藏  举报