您的位置:首页 > 编程语言 > Java开发

SpringMVC中使用StandardServletMultipartResolver进行文件上传

2017-04-18 21:47 591 查看

概述

从Spring3.1开始,Spring提供了两个MultipartResolver的实现用于处理multipart请求。

CommonsMultipartResolver

StandardServletMultipartResolver

CommonsMultipartResolver使用commons Fileupload来处理multipart请求,所以在使用时,必须要引入相应的jar包;

StandardServletMultipartResolver是基于Servlet3.0来处理multipart请求的,所以不需要引用其他jar包,但是必须使用支持Servlet3.0的容器才可以。

以tomcat为例,从Tomcat 7.0.x的版本开始就支持Servlet3.0了。

如何确定哪个版本的Tomcat支持servlet3.0可以看这里

Spring的配置

在配置文件fileUpload-servlet.xml中设置bean,bean的id必须是multipartResolver

这里并没有对上传文件的大小等参数进行配置,因为相应的配置都移到了web.xml中。

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


web.xml的配置

要注意xml中web-app节点使用的版本,必须是3.0+

要注意servlet节点下的multipart-config节点的配置。区别与使用CommonsMultipartResolver进行文件上传时配置的不同。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

····
<servlet>
<servlet-name>fileUpload</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:fileUpload-servlet.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
<multipart-config>
<!--临时文件的目录-->
<location>d:/</location>
<!-- 上传文件最大2M -->
<max-file-size>2097152</max-file-size>
<!-- 上传文件整个请求不超过4M -->
<max-request-size>4194304</max-request-size>
</multipart-config>
</servlet>
....
</web-app>


Controller设置

两种上传方法,大同小异。

@Controller
@RequestMapping(value = "/file2")
public class FileController2 {

/**
* 在方法签名中使用MulitpartHttpServletRequest类型。
*
* @param request
* @return
*/
@RequestMapping(value = "/commUploadB")
@ResponseBody
public JSONObject commUploadB(MultipartHttpServletRequest request) {
JSONObject json = new JSONObject();
json.put("succ", false);
try {
MultipartFile file = request.getFile("uploadFileB");// 与页面input的name相同
File imageFile = new File("d:/upload2.jpg");// 上传后的文件保存目录及名字
file.transferTo(imageFile);// 将上传文件保存到相应位置
json.put("succ", true);
return json;
} catch (Exception e) {
e.printStackTrace();
return json;
}
}

/**
* 在方法签名中使用MultipartFile类型,并使用@RequestPart注解。
*
* @param uploadFileC
* @return
*/
@RequestMapping(value = "/commUploadC")
@ResponseBody
public JSONObject commUploadC(@RequestPart("uploadFileC") MultipartFile uploadFileC) {
JSONObject json = new JSONObject();
json.put("succ", false);
try {
File imageFile = new File("d:/upload3.jpg");// 上传后的文件保存目录及名字
uploadFileC.transferTo(imageFile);// 将上传文件保存到相应位置
json.put("succ", true);
return json;
} catch (Exception e) {
e.printStackTrace();
return json;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring spring mvc
相关文章推荐