SpringMVC使用StandardServletMultipartResolver上传文件

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)将StandardServletMultipartResolver添加到Spring容器中

1     @Bean
2     public MultipartResolver multipartResolver(){
3         return new StandardServletMultipartResolver();
4     }

(2)在Servlet中(DispatcherServlet)指定multipart的配置

 1     @Override
 2     protected void customizeRegistration(ServletRegistration.Dynamic registration) {
 3         super.customizeRegistration(registration);
 4         String location = "d:\\tmp\\";
 5         File file = new File(location);
 6         if(!file.exists() && !file.isDirectory()){
 7             file.mkdir();
 8         }
 9         long maxFileSize = 2097152; //2M
10         long maxRequestSize = 4194304;  //4M
11         int fileSizeThreshold = 0;
12         MultipartConfigElement multipartConfigElement = new MultipartConfigElement(location,maxFileSize,maxRequestSize,fileSizeThreshold);
13         registration.setMultipartConfig(multipartConfigElement);//配置对multipart的支持
14     }

(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/10261536.html

时间: 2024-08-02 07:56:52

SpringMVC使用StandardServletMultipartResolver上传文件的相关文章

springMVC+jsp+ajax上传文件

工作中遇到的小问题,做个笔记 实现springMVC + jsp + ajax 上传文件 HTML <body> <form id="myform" method="post" > 登录名<input type="text" name="loginName" /> <br> 上传录音<input type="file" name="record

【springmvc】springmvc中如何上传文件

使用到的组件:可自行根据情况选择版本 <!--上传依赖包--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency> <!--commons-upload依赖包begin-->

SpringMVC+jquery.uploadify 上传文件

前言 以前用Asp.net MVC+uploadify上传文件,最近学习SpringMVC,所以就用SpringMVC+uploadify做个上传文件的demo. 刚开始用form表单的方式提交,在Controller Action中用@RequestParam MultipartFile file就能拿到上传文件信息.后我直接使用uploadify的方式上传,接口没有做任何调整,上传的过程中报http400, 客户端的请求不符合接口的要求,表单post提交时报文参数是以Form Data方式,

SpringMVC使用CommonsMultipartResolver上传文件

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

SpringMVC表单上传文件+表单数据

本次遇到的需求是:在用户提交表单数据的时候,同时上传文件.并且表单数据传到后台可以组成一个pojo controller层的方法定义如下: public Object apply(HttpServletRequest request, @RequestParam("file") MultipartFile file, Application application) { } 对于上传的文件的接收使用:@RequestParam("file") MultipartFi

springmvc 使用ajx上传文件 不设置form enctype

最近在做一个小项目 碰到这个问题 解决方案如下 1.js代码如下 获取当前form 转换为formdata ajax提交到后台 var form = $("#importForm"); var formData =new FormData($scope._window.find("#importForm")); $.ajax({ type:"POST", data:formData, processData:false, contentType:

springmvc利用jqueryupload上传文件,后台处理方法

public void importIdentifySchemeFile(Integer id,Integer type,HttpServletRequest request, HttpServletResponse response){ PrintWriter out = null;          try {              //初始化变量              InputStream stream = null;              String ret_fileNa

2. SpringMVC 上传文件操作

1.创建java web项目:SpringMVCUploadDownFile 2.在项目的WebRoot下的WEB-INF的lib包下添加如下jar文件 1 com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar 2 com.springsource.net.sf.cglib-2.2.0.jar 3 com.springsource.org.aopalliance-1.0.0.jar 4 com.springsource.org.apache.commo

SpringMVC系列(四)注解方式上传文件

本文主要介绍SpringMVC上传文件的两种方式 第二种较第一种而言,采用了解析器,大大提高了上传的效率. 第一种: 步骤: 1.引入jar包 2.配置spring-servlet.xml文件 <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.Commons