SpringMVC内置了对文件上传的支持,它需要我们配置一个MultipartResolver,Servlet3之前它只有一个基于commons-fileupload的实现CommonsMultipartResolver,笔者以前也写过一篇基于CommonsMultipartResolver的文件上传的博文,地址是http://elim.iteye.com/blog/1188116。Servlet3之后SpringMVC提供了另一个基于Servlet3的文件上传的实现,叫StandardServletMultipartResolver。本文将只介绍基于Servlet3的文件上传支持,作为以前写的基于commons-fileupload的实现的博文的一个补充。
首先需要定义一个StandardServletMultipartResolver类型的bean,对应的id默认情况下必须为multipartResolver,具体可以查看DispatcherServlet.initMultipartResolver()。
<!-- 上传文件的解析器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>
然后需要启用Servlet3的文件上传支持,需要我们在web.xml中定义DispatcherServlet时定义<multipart-config/>
,如果是基于注解配置的,则需要使用@javax.servlet.annotation.MultipartConfig
。
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<!-- 启用Servlet3文件上传支持 -->
<multipart-config>
<file-size-threshold>512000</file-size-threshold>
<location></location>
<max-file-size></max-file-size>
<max-request-size></max-request-size>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
启用了基于Servlet3的文件上传支持时,我们在Controller中有四种方式来接收上传的文件。
- 通过Spring的org.springframework.web.multipart.MultipartFile直接接收。
- 通过Servlet3提供的javax.servlet.http.Part接收。
- 通过Spring的org.springframework.web.multipart.MultipartHttpServletRequest的getFile()获取。
- 通过Servlet3的javax.servlet.http.HttpServletRequest的getPart()获取。
@RequestMapping(value="doupload", method=RequestMethod.POST)
@ResponseBody
public Object doUpload(@RequestParam("file1") MultipartFile file1,
@RequestParam("file2") Part file2,
MultipartHttpServletRequest multiRequest, HttpServletRequest request)
throws Exception {
//保存文件
Map<String, Object> result = new HashMap<>();
result.put("file1.contentType", file1.getContentType());
result.put("file1.size", file1.getSize());
result.put("file2.contentType", file2.getContentType());
result.put("file2.size", file2.getSize());
//其它信息可以参考各自的API
//也可以通过MultipartHttpServletRequest的API获取文件
file1 = multiRequest.getFile("file1");//获取file1
file1 = multiRequest.getFile("file2");//获取file2
MultiValueMap<String, MultipartFile> multiFileMap
= multiRequest.getMultiFileMap();//所有的文件
//如果是基于Servlet3的文件上传,也可以通过HttpServletRequest获取文件
file2 = request.getPart("file1");
file2 = request.getPart("file2");
Collection<Part> parts = request.getParts();//获取所有的文件
if (multiFileMap != null && parts != null) {
}
return result;
}
(本文是基于Spring4.1.0所写)
相关推荐
文件上传、下载的具体代码,包含servlet版本、springmvc版本
文件上传是项目开发中最常见的功能。为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。 一旦设置...
本篇文章主要介绍了SpringMVC + servlet3.0 文件上传的配置和实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
s文件上传是项目开发中最常见的功能。为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。 一旦...
jsp_upload-servlet项目:(1).Jsp/servlet 实现文件上传 (2).模拟Post请求/servlet 实现文件上传 jetty_upload-springmvc项目:(3).模拟Post请求/Controller(SpringMvc)实现文件上传 请尊重原著,请勿随意传播。
303数据校验、错误消息的显示及国际化、Ajax返回JSON、使用HttpMessageConverter、国际化_通过超链接切换中英文、文件上传、自定义的拦截器、拦截器的零Xml配置、异常处理(ExceptionHandler注解、 ...
SERVLET技术实现数据库查询,springmvc,mysql,有后台分页,富文本编辑器,附件上传,文件上传,时间选择器等等的源代码,保证可以运行,带导入视频
1.41.4 编辑 springspring spring-servlet.xmlservlet.xml servlet.xml servlet.xml servlet.xml servlet.xmlservlet.xml ................................ ................................ .......................
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
最近在项目中需要上传文件文件,之前一直都是form提交的,尝试了一下AjaxForm,感觉还比较好用,写篇随笔mark下,供以后使用。 准备工作: 下载jquery-form.js 相关jar: commons-fileupload-1.1.1.jar commons-io-...
Spring MVC 学习总结(五)——校验与文件上传 目录 2.2.7、范围 2.2.8、其它注解 2.3、注解控制器参数 1.4、在UI中添加错误标签 1.5、测试运行 三、使用jQuery扩展插件Validate实现前端校验 3.1、jQuery扩展插件...
它是反向代理,实际上不是转发代理,尽管Servlet的模板形式可能会使这条线模糊。 这几乎不是第一个代理,为什么我要编写它,为什么还要使用它呢? 很简单-单一源文件实现 经过测试-确信它可以正常工作 它是安全...
适读人群 :本书适合有较好的Java编程基础,JSP、Servlet、JDBC基础,Spring框架基础的读者,尤其适合于对Spring MVC和MyBatis了解不够深入,或对Spring MVC+MyBatis整合开发不太熟悉的开发人员阅读。 1. 基于Spring...
基于JQuery的文件上传进度条、文件上传的速度以及后台Servlet对文件的保存。 简单易懂,
serlvet 中使用apache.commons.fileupload 来实现上传功能,这里没有使用springmvc 等只使用了servlet所以代码简单,主要是为了上传功能!
driven配置、InitBinder注解、数据的格式化、JSR303数据校验、错误消息的显示及国际化、Ajax返回JSON、使用HttpMessageConverter、国际化_通过超链接切换中英文、文件上传、自定义的拦截器、拦截器的零Xml配置、异常...
(上传的资源中包括两台服务器的源码和数据库表文件mybatis.sql) 1.项目springmvc19_day02_01部署在Tomc6.0上,端口号为80。项目ssmImage19部署在Tomcat7.0上,作为图片服务器,端口号为8003。 2.访问地址是...
11、支持servlet3的上传东东,可能是对现有MultipartResolver的加强 12、JPA什么,直接无视 以下都是springmvc的加强,可以注意了 13、可以在controller中,使用annotation临时指定特殊的Mapping或者...
该管理系统基于Java Web开发技术主要实现了用户的注册登录、个人信息管理、收发邮件、个人邮箱管理(收件箱、发件箱、草稿箱管理)、通讯录管理、文件上传与下载等功能,使用springmvc框架以及jsp+servlet混合实现,...
自己写项目写出来的SSM框架模板,纯原创。 需要可以自行购买,保证不亏。 遇到不懂得,可以私我留言。 =================================== 下面技术所需的所有配置及...5. shiro、lombok插件、文件上传 ......等等