SpringMVC提交数据的同时上传文件

来源:互联网 发布:美利达淘宝旗舰店 编辑:程序博客网 时间:2024/06/05 04:58

1. 要点

  1. html页面中的表单必须是enctype=”multipart/form-data”
  2. 使用jquery-form的ajaxSubmit进行表单提交
  3. 使用SpringMVC进行处理,需要配置multipartResolver
  4. SpringMVC控制器中判断request是否包含文件,有文件则处理文件,没有文件则按原业务逻辑进行处理

2. 步骤

2.1 html页面

需要设置表单的enctype=”multipart/form-data”。并使用jQuery-form的ajaxSubmit提交表单。

<form id="addForm" action="<c:url value='/doAdd'/>" method="POST" enctype="multipart/form-data">    <input type="text" name="name" />     <!-- 可以是任意个文件域 -->    <input type="file" name="file1"/>    <input type="file" name="file2"/>    <input type="file" name="file3"/>    <input type="button" id="submitBtn" value="提交"/></form><!-- 引入依赖的Jquery和JQuery-Form --><script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script><script src="https://cdn.jsdelivr.net/jquery.form/4.2.1/jquery.form.min.js"     integrity="sha384-tIwI8+qJdZBtYYCKwRkjxBGQVZS3gGozr3CtI+5JF/oL1JmPEHzCEnIKbDbLTCer"     crossorigin="anonymous"></script><!-- 自定义JavaScript --><script type="text/javascript">    $("#submitBtn").on("click", function(){        $("#addForm").ajaxSubmit({            success : function(data){                alert(data);            },            error : function(){                alert("请求错误");            }        });    });</script>

2.2 SpringMVC配置

需要配置multipartResolver。

<!-- 文件上传解析器 --><bean id="multipartResolver"    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    <property name="maxUploadSize" ref="maxUploadSize"></property></bean><!-- 上传文件 最大 50M --><bean id="maxUploadSize" class="java.lang.Long" >    <constructor-arg index="0">        <value>52428800</value>    </constructor-arg></bean>

2.3 Controller

对于控制层,如果request是MultipartHttpServletRequest类型,则说明表单中有文件,则可以对文件进行处理。如果没有上传文件,则对表单中的其它属性进行处理。

import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;@Controllerpublic class TestFileController {    @RequestMapping("/doAdd")    @ResponseBody    public String doAdd(@RequestParam("name") String name, HttpServletRequest request){        if (request instanceof MultipartHttpServletRequest) {            MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;            // 获取上传的文件            Map<String, MultipartFile> fileMap = multipartHttpServletRequest.getFileMap();            for(Map.Entry<String, MultipartFile> entry : fileMap.entrySet()){                // 对文件进处理                System.out.println(entry.getKey() + ":" + entry.getValue().getOriginalFilename());            }        }        // 对name进行处理        System.out.println(name);        return "ok";    }}
原创粉丝点击