概述:

CommonsMultipartResolver是基于Apache的Commons FileUpload来实现文件上传功能的。所以在项目中需要相应的jar文件。

FileUpload版本要求1.2及以上。相应的gradle配置:

  1. "commons-fileupload:commons-fileupload:1.2.2"
  • 1

上传方法的实现

1. 代码方式

直接在controler中new一个CommonsMultipartResolver。

  1. @Controller
  2. @RequestMapping(value = "/file")
  3. public class FileController {
  4. @RequestMapping(value = "/commUploadA")
  5. @ResponseBody
  6. public JSONObject commUploadA(HttpServletRequest request) {
  7. JSONObject json = new JSONObject();
  8. json.put("succ", false);
  9. try {
  10. //直接new一个CommonsMultipartResolver
  11. CommonsMultipartResolver cmr = new CommonsMultipartResolver(request.getServletContext());
  12. cmr.setDefaultEncoding("utf-8");
  13. cmr.setMaxInMemorySize(40960);
  14. cmr.setMaxUploadSize(10485760000L);
  15. if (cmr.isMultipart(request)) {
  16. MultipartHttpServletRequest multipartRequest = cmr.resolveMultipart(request);
  17. MultipartFile file = multipartRequest.getFile("uploadFile");// 与页面input的name相同
  18. File imageFile = new File("d:/upload1.jpg");// 上传后的文件保存目录及名字
  19. file.transferTo(imageFile);// 将上传文件保存到相应位置
  20. json.put("succ", true);
  21. return json;
  22. }
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. return json;
  27. }
  28. }

2. Xml方式

通过spring配置一个名为”multipartResolver”的bean。

  1. <bean id="multipartResolver"
  2. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3. <property name="defaultEncoding" value="utf-8"></property>
  4. <property name="maxUploadSize" value="10485760000"></property>
  5. <property name="maxInMemorySize" value="40960"></property>
  6. </bean>

controller中的方法做相应修改。

  1. @Controller
  2. @RequestMapping(value = "/file")
  3. public class FileController {
  4. @RequestMapping(value = "/commUploadB")
  5. @ResponseBody
  6. public JSONObject commUploadB(MultipartHttpServletRequest request) {//参数类型不同
  7. JSONObject json = new JSONObject();
  8. json.put("succ", false);
  9. try {
  10. MultipartFile file = request.getFile("uploadFile");// 与页面input的name相同
  11. File imageFile = new File("d:/upload2.jpg");// 上传后的文件保存目录及名字
  12. file.transferTo(imageFile);// 将上传文件保存到相应位置
  13. json.put("succ", true);
  14. return json;
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. return json;
  18. }
  19. }
  20. }

两种方法的区别:

  1. 将CommonsMultipartResolver的实例化由代码实现改为了xml配置实现。
  2. 方法中的参数类型由HttpServletRequest变为了MultipartHttpServletRequest。

而上传的获取和保存逻辑没有变化。

注意:

在使用xml方式时,bean的名字必须为:multipartResolver。可在org.springframework.web.servlet.DispatcherServlet中找到原因:

  1. public class DispatcherServlet extends FrameworkServlet {
  2. /** Well-known name for the MultipartResolver object in the bean factory for this namespace. */
  3. public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";
  4. ......
  5. /**
  6. * Initialize the MultipartResolver used by this class.
  7. * <p>If no bean is defined with the given name in the BeanFactory for this namespace,
  8. * no multipart handling is provided.
  9. */
  10. private void initMultipartResolver(ApplicationContext context) {
  11. try {
  12. this.multipartResolver = context.getBean(MULTIPART_RESOLVER_BEAN_NAME, MultipartResolver.class);
  13. if (logger.isDebugEnabled()) {
  14. logger.debug("Using MultipartResolver [" + this.multipartResolver + "]");
  15. }
  16. }
  17. catch (NoSuchBeanDefinitionException ex) {
  18. // Default is no multipart resolver.
  19. this.multipartResolver = null;
  20. if (logger.isDebugEnabled()) {
  21. logger.debug("Unable to locate MultipartResolver with name '" + MULTIPART_RESOLVER_BEAN_NAME +
  22. "': no multipart request handling provided");
  23. }
  24. }
  25. }
  26. ......
  27. }

简要分析CommonsMultipartResolver

CommonsMultipartResolver实现接口org.springframework.web.multipart.MultipartResolver,主要作用是将HttpSerlvetRequest封装成MultipartHttpServletRequest。

  1. public interface MultipartResolver {
  2. ......
  3. MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException;
  4. ......
  5. }

具体的封装方法参考CommonsMultipartResolver对resolveMultipart的实现:

  1. org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(javax.servlet.http.Ht

SpringMVC中使用CommonsMultipartResolver进行文件上传的更多相关文章

  1. 分享知识-快乐自己:SpringMvc中的单多文件上传及文件下载

    摘要:SpringMvc中的单多文件上传及文件下载:(以下是核心代码(拿过去直接能用)不谢) <!--设置文件上传需要的jar--> <dependency> <grou ...

  2. SpringMVC中使用 MultipartFile 进行文件上传下载及删除

    一:引入必要的包 <!--文件上传--> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fil ...

  3. Spring中使用StandardServletMultipartResolver进行文件上传

    从Spring3.1开始,Spring提供了两个MultipartResolver的实现用于处理multipart请求,分别是:CommonsMultipartResolver和StandardSer ...

  4. SpringMVC(四)-- springmvc的系统学习之文件上传、ajax&json处理

    资源:尚学堂 邹波 springmvc框架视频 一.文件上传 1.步骤: (1)导入jar包 commons-fileupload,commons-io (2)在springmvc的配置文件中配置解析 ...

  5. zt对于C#中的FileUpload解决文件上传大小限制的问题设置

    对于C#中的FileUpload解决文件上传大小限制的问题设置 您可能没意识到,但对于可以使用该技术上载的文件的大小存在限制.默认情况下,使用 FileUpload 控件上载到服务器的文件最大为 4M ...

  6. SpringMVC(三)-- 视图和视图解析器、数据格式化标签、数据类型转换、SpringMVC处理JSON数据、文件上传

    1.视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView 对象 对于那些返回 String,View 或 ModeMap 等类型的处理方法,SpringMVC 也会在内部将 ...

  7. springMVC数据校验与单文件上传

    spring表单标签:    <fr:from/> 渲染表单元素    <fr:input/>输入框组件    <fr:password/>密码框组件标签    & ...

  8. SpringMVC ajax技术无刷新文件上传下载删除示例

    参考 Spring MVC中上传文件实例 SpringMVC结合ajaxfileupload.js实现ajax无刷新文件上传 Spring MVC 文件上传下载 (FileOperateUtil.ja ...

  9. SpringMVC(三) RESTful架构和文件上传下载

    RESTful架构 REST全名为:Representational State Transfer.资源表现层状态转化.是目前最流行的一种互联网软件架构. 它结构清晰.符合标准.易于理解.扩展方便,所 ...

随机推荐

  1. Asp.Net Core 项目实战参考

    Asp.Net Core 项目实战链接 http://www.cnblogs.com/fonour/p/5904530.html

  2. html中给元素添加背景图片或者gif动图

    添加背景图片有四种常用的方式,分别是: repeat    完全平铺 repeat-x    横向平铺 repeat-y    纵向平铺 no-repeat    不平铺 使用示例: <!DOC ...

  3. Servlet中使用 Last-Modified、Expires和Cache-Control

    long now = System.currentTimeMillis(); long expires = System.currentTimeMillis() + (1000 * 60 * minu ...

  4. Selenium2+python自动化35-获取元素属性【转载】

    前言 通常在做断言之前,都要先获取界面上元素的属性,然后与期望结果对比.本篇介绍几种常见的获取元素属性方法. 一.获取页面title 1.有很多小伙伴都不知道title长在哪里,看下图左上角. 2.获 ...

  5. 任务侦听器(Task listener)

    任务侦听器:用于在任务相关的事件发生时执行一段java逻辑或者是表达式 <userTask id="myTask" name="My Task" > ...

  6. python的垃圾回收机制和析构函数__del__

    析构函数__del__定义:在类里定义,如果不定义,Python 会在后台提供默认析构函数. 析构函数__del__调用: A.使用del 显式的调用析构函数删除对象时:del对象名: class F ...

  7. Python2.5/2.6实用教程:基础篇(转)

    介绍 本文方便有经验的程序员进入Python世界.本文适用于python2.5/2.6版本. Deparecated:Python3 和 python2.x语法不同.如果你正在用python3,请参考 ...

  8. POJ 1741 Tree (点分治)

                                                                        Tree Time Limit: 1000MS   Memory ...

  9. 灯泡游戏 (Kruskal)(并查集)

    灯泡游戏 时间限制: 1 Sec  内存限制: 64 MB提交: 9  解决: 4[提交][状态][讨论版] 题目描述 有 一个n行m列的矩阵,左上角坐标是(0,0),右下角坐标是(n-1,m-1). ...

  10. 选择快速源来加速linux系统更新

    sudo pacman-mirrors -c China -g 引用自manjaro百度贴吧