DispatcherServlet并没有实现任何解析multipart请求数据的功能,它将该任务委托给了Spring中MultipartResolver策略接口的实现,通过该接口的实现类来解析multipart请求中的内容。从Spring3.1开始,Spring内置了两个MultipartResolver的实现供我们选择:

  • StandardServletMultipartResolver  依赖于Servlet3.0对multipart请求的支持(始于Spring3.1)
  • CommonsMultipartResolver  使用Jakarta Commons FileUpload解析multipart请求

一般来说,StandardServletMultipartResolver将会是优先选择的方案,它使用了Servlet所提供的原生功能支持,并不需要依赖任何第三方组件。如果我们需要将应用部署到Servlet3.0之前的容器中,或者还没有使用Spring3.1或者更高的版本,那么可能就需要使用CommonsMultipartResolver了

(1)引入Jakarta相关jar包

 1     <dependency>
 2       <groupId>commons-fileupload</groupId>
 3       <artifactId>commons-fileupload</artifactId>
 4       <version>1.4</version>
 5     </dependency>
 6
 7     <dependency>
 8       <groupId>commons-io</groupId>
 9       <artifactId>commons-io</artifactId>
10       <version>2.6</version>
11     </dependency>

(2)将CommonsMultipartResolver添加到Spring容器中

1     @Bean
2     public MultipartResolver multipartResolver() throws IOException {
3         CommonsMultipartResolver multipartResolver =  new CommonsMultipartResolver();
4         multipartResolver.setUploadTempDir(new FileSystemResource("/tmp/coreqi/uploads"));
5         multipartResolver.setMaxUploadSize(2097152);
6         multipartResolver.setMaxInMemorySize(0);
7         return multipartResolver;
8     }

(3)编写上传文件的Form表单

将<form>标签的enctype设置为multipart/form-data,这会告诉浏览器以multipart数据的形式提交表单,而不是以表单数据的形式进行提交。

 1 <!DOCTYPE html>
 2 <html lang="en" xmlns:th="http://www.thymeleaf.org">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>上传页面</title>
 6 </head>
 7 <body>
 8     <form method="post" th:action="@{/file/upload}" enctype="multipart/form-data">
 9         描述:<input type="text" name="desc"/>
10         文件:<input type="file" name="file" accept="image/jpeg,image/png,image/gif"/>
11         <input type="submit" value="上传"/>
12     </form>
13 </body>
14 </html>

(4)编写上传的控制器

 1     @PostMapping("/file/upload")
 2     public String upload(@RequestParam String desc, @RequestParam MultipartFile file) throws IOException {
 3         if(!file.isEmpty()){
 4             String filePath = "d:\\img\\";
 5             File fileDir = new File(filePath);
 6             if(!fileDir.exists() && !fileDir.isDirectory()){
 7                 fileDir.mkdir();
 8             }
 9             file.transferTo(new File(filePath + file.getOriginalFilename()));
10         }
11         return "file/upload";
12     }

转载于:https://www.cnblogs.com/fanqisoft/p/10261569.html

SpringMVC使用CommonsMultipartResolver上传文件相关推荐

  1. Spring CommonsMultipartResolver 上传文件

    http://yanglei008.iteye.com/blog/246920 Spring CommonsMultipartResolver 上传文件 博客分类: spring SpringMVCJ ...

  2. java form 上传文件_java通过表单进行文件上传的几种方法

    上传文件的分类: 无论什么方式上传文件,都要用post提交 方式一: 前端:表单方式上传文件 后端: 使用上传技术是apache中的Commons-fileupload.jar commons-io. ...

  3. ajax上传 java,javaWeb中使用ajax上传文件

    javaWeb上传图片 上传文件所必要的两个jar包:commons-fileupload.jar.commons-io.jar. 核心代码: String withPath = req.getSer ...

  4. SpringMVC上传文件

    首先自我介绍一下,我是王登高,下面是我的头像: 是不是很帅,我每天照镜子都感觉自己帅. 好了不扯这些没用的,我们进入正题:前两天,自己边学边做遇到的SpringMVC上传文件的问题,用户可以上传图片, ...

  5. SpringMVC上传文件配置

    方式一:将multipartResolver中的属性分别单独配置(推荐) <!-- SpringMVC文件上传 --><bean id="multipartResolver ...

  6. SpringMVC 上传文件and过滤器

    SpringMVC提供了一个MultipartResolver接口用来实现文件上传,并使用Commons FileUpload技术实现了一个该接口的实现类CommonsMultipartResolve ...

  7. SpringMVC实现PUT请求上传文件

    在JQuery中,我们可以进行REST ful中delete和put的请求,但是在java EE标准中,默认只有在POST请求的时候,servlet 才会通过getparameter()方法取得请求体 ...

  8. SpringMVC上传文件的三种方式

    /** 通过流的方式上传文件* @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象*/@Reques ...

  9. SpringMVC上传文件出现400 Bad Request错误

    1.起因 写了上传文件代码,用postman测试一下报400 Dad Request. 2.原因 看了下资料了解到使用SpringMVC上传文件需要在form表单中添加enctype="mu ...

  10. form表单上传文件_SpringBoot中如何使用SpringMVC上传文件?

    今天我们要说的这个话题很简单,不要问为啥,因为SpringBoot,哈哈.现在SpringBoot可以说人人都会用了,它的好处是显而易见的,大大的简化了配置,一起来看看吧. 我们分以下3种情况来谈这个 ...

最新文章

  1. myeclipse下拷贝的项目,tomcat下部署名称和导出为war包的名称默认值修改
  2. ASP.NET MVC Action Filters
  3. 注解默认继承_默认方法和多重继承
  4. 同时多次调用存储规程_本体技术视点 | 神奇的Merkle树是如何实现存储层优化的?...
  5. java编码gbk的不可_解决 java “错误:编码GBK 的不可映射字符”
  6. sql server死锁_如何使用扩展事件和SQL Server代理自动执行SQL Server死锁收集过程
  7. 炮姐ed计算机谱子,炮姐来了!《科学超电磁炮T》正式PV公开 1月开播_游侠网 Ali213.net...
  8. linux tar 打包.压缩.解压缩 命令说明
  9. 普林斯顿微积分读本(修订版)
  10. 现代心理与教育统计学 第一章
  11. stream从list实体类筛选出符合条件的单个实体类
  12. 办公室网络带宽叠加(有线和WiFi同时使用)
  13. 系统的延时任务和定时任务
  14. linux局域网即时通讯,基于身份的Linux下局域网即时通讯系统的研究与实现
  15. kubeadm更改配置
  16. 互联网测试必须要知道的App稳定性测试
  17. 【错误解决】SpringBoot邮件服务的一些错误及其解决方案
  18. 通过 Flowable-UI 来体验一把 Flowable 流程引擎
  19. 3com 4500交换机划分vlan
  20. Android开发艺术探索PDF版

热门文章

  1. PHP发微信消息必须开网吗,关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题...
  2. 9)Thymeleaf ⼯具类对象表达式
  3. Linux CentOS 7.2 安装 Tomcat 8 服务器
  4. 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_09.RequestMapping注解的属性
  5. 阶段3 2.Spring_03.Spring的 IOC 和 DI_1 ioc的概念和作用
  6. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_11_常用的函数式接口_Consumer接口练习...
  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_3_字符输出流_Writer类FileWriter类...
  8. docker安装jdk8
  9. Vue2.0 的漫长学习ing-2-1
  10. Web---演示Servlet的相关类、下载技术、线程问题、自定义404页面