SpringMVC处理Multipart数据

时间:2022-07-22
本文章向大家介绍SpringMVC处理Multipart数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一般的提交简单的文本格式的数据,基于文本的表单提交可以满足要求,但是对于传输视频和照片二进制文件,就不行了。

multipart可以将表单拆分成多个部分,在一般表单输入域中,它会是基于文本型的数据。如果是上传文件可以对应为二进制。

Multipart/form-data是建立在HTTP的POST请求方式以上的请求,其一般用于HTTP文件上传。 所以我们需要在表单(form)元素中如下设置,使得该表单请求用于处理文件:

 <form class="" action="" method="post" enctype="multipart/form-data">

SpringMVC处理Multipart数据

  1. 配置Multipart解析器
配值Multipart有两种方式CommonsMultipartResolver: 使用Jakarta Commons FileUpload解析multipart请求。StandardServletMultipartResolver: 依赖于Servlet3.0对multipart请求的支持。
  • 方式一:

使用CommonsMultipartResolver解析器 因为CommonsMultipartResolver依赖于Apache Commons FileUpload,所以我们需要引入commons-fileupload

1 <dependency>
2     <groupId>commons-fileupload</groupId>
3     <artifactId>commons-fileupload</artifactId>
4     <version>1.3.1</version>
5 </dependency>

在SpringMVC配置文件中装载Bean即可,通过注入相关属性设置参数。

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="utf-8" /> 
    <property name="maxUploadSize" value="1024000" />
    <property name="maxInMemorySize" value="204800" />
    <property name="uploadTempDir" value="/" />
</bean>
  • 方式二:

使用StandardServletMultipartResolver解析器,在SpringMVC配置文件中装载Bean

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver">

因为StandardServletMultipartResolver解析使用Servlet的处理Multipart方法处理,所以我们需要在web.xml中设置DispatcherServlet时设置相关属性

<servlet>
    <servlet-name>useSpringMVC-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/spring-*.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <multipart-config>
        <location>/</location>
        <max-file-size>102400</max-file-size>
        <max-request-size>204800</max-request-size>
        </multipart-config>
</servlet>
  1. 处理Multipart请求 Spring提供了MutilpartFile接口处理Mutilpart数据。接口API如下:
public interface MultipartFile {
    /**
    * 返回表单中mutilpart数据的名字
    */
    String getName();
    /**
    * 返回该文件名
    */
    String getOriginalFilename();

    boolean isEmpty();
    byte[] getBytes() throws IOException;
    
    InputStream getInputStream() throws IOException;
    /**
    * 把MultipartFile接口对象转换为File对象
    */
    void transferTo(File dest) throws IOException, IllegalStateException;
}

controller代码

@RequestMapping(value="/upload", method=RequestMethod.POST)
public String fileUpload(@RequestPart(value="file") MultipartFile multipartFile){
    //处理逻辑
    String path = "/usr/java/fileupload/" + file.getOriginalFilename();
    multipartFile.transferTo(new File(path));    
}

多文件上传

多文件上传只需要把html代码中的< input name=".." >name属性设置为一样的就好。然后在controller中使用MultipartFile数组接受就行。

1 @RequestMapping(value="/upload", method=RequestMethod.POST)
2 public String fileUpload(@RequestPart(value="file") MultipartFile[] multipartFiles){
3     //处理逻辑
4 }