SpringMVC使用StandardServletMultipartResolver上传文件
2018-04-14 18:58:25
1064 次阅读
0 个评论
从Spring3.1开始,Spring提供了两个MultipartResolver的实现用于处理multipart请求。
CommonsMultipartResolver使用commons Fileupload来处理multipart请求,所以在使用时,必须要引入相应的jar包;
StandardServletMultipartResolver是基于Servlet3.0来处理multipart请求的,所以不需要引用其他jar包,但是必须使用支持Servlet3.0的容器才可以。
CommonsMultipartResolver
StandardServletMultipartResolver
CommonsMultipartResolver使用commons Fileupload来处理multipart请求,所以在使用时,必须要引入相应的jar包;
StandardServletMultipartResolver是基于Servlet3.0来处理multipart请求的,所以不需要引用其他jar包,但是必须使用支持Servlet3.0的容器才可以。
以tomcat为例,从Tomcat 7.0.x的版本开始就支持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;
}
}
}
00
相关话题
- SpringMVC流式上传文件
- SpringMVC 配置servlet3.0 文件上传
- 使用jquery-form.js异步上传文件
- 文件流式上传
- SpringBoot设置上传文件大小
- Ajax跨域上传文件
- 基于Nginx XSendfile+SpringMVC进行文件下载
- Servlet3.0原生API文件上传
- javascript判断上传的文件是否为图片
- SpringBoo使用jasypt加密配置文件
- 使用commons-vfs监听文件系统
- SpringMVC 限流量
- Nginx 上传文件出现413 Request Entity Too Large错误
- 使用commons-io-2.0监听文件变化
- SpringMVC获取Request域