springMVC实现单文件和多文件上传
来源:互联网 发布:代码格式化 知乎 编辑:程序博客网 时间:2024/05/22 04:06
一、介绍
spring内建的multipart支持网络程序文件上传。我们可以通过配置MultipartResolver来启动上传支持。它定义在org.springframework.web.multipart包中。spring是通过使用Commons FileUpload插件来完成MultipartResolver的。
spring内建的multipart支持网络程序文件上传。我们可以通过配置MultipartResolver来启动上传支持。它定义在org.springframework.web.multipart包中。spring是通过使用Commons FileUpload插件来完成MultipartResolver的。
默认情况下,spring不处理multipar的form信息,因为开发者默认会自己去处理这部分信息,当然我们可以随时打开这个支持。这样对于每一个请求,都会查看它是否包含multipart的信息,如果没有则按流程继续执行。如果发现有,就会交给已经被声明的MultipartResolver进行处理,然后我们就能像处理其他普通属性一样处理文件上传了。
二、使用MultipartResolver
<!--200*1024*1024即200M resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="209715200" /><property name="defaultEncoding" value="UTF-8" /><property name="resolveLazily" value="true" /></bean>当然,我们要把所需的jar包放到lib中, 就是commons-fileupload.jar.
三、处理一个文件上传的form
当MultipartResolver处理完成以后,请求被处理成和普通请求一样。下面是页面文件。
单文件:
course_admin/file.jsp 文件<body><div align="center"><h1>上传附件</h1><form method="post" action="<%= request.getContextPath()%>/courses/doUpload" enctype="multipart/form-data"><input type="file" name="file"/><input type="submit"/></form></div></body>
多文件:course_admin/multifile.jsp 文件<body><div align="center"><h1>上传多个附件</h1><form method="post" action="<%= request.getContextPath()%>/courses/doUpload2" enctype="multipart/form-data"><input type="file" name="file1"/><br/><input type="file" name="file2"/><input type="submit"/></form></div></body>
四,下一步是创建一个controller来处理文件上传。controller也和其他的一样,除了在我们的方法参数中使用MultipartHttpServletRequest或者MultipartFile。@Controller@RequestMapping("/courses")public class CourseController {@RequestMapping(value="/upload",method=RequestMethod.GET)public String showUploadPage(@RequestParam(value="muti",required = false ) Boolean multi){ if(multi!=null&&multi){ return "course_admin/multifile"; } return "course_admin/file"; } @RequestMapping(value="/doUpload",method=RequestMethod.POST) public String doUploadFile(@RequestParam("file") MultipartFile file) throws IOException{ if(!file.isEmpty()){ FileUtils.copyInputStreamToFile(file.getInputStream(), new File("d:\\test", System.currentTimeMillis()+ file.getOriginalFilename())); } return "success"; } @RequestMapping(value="/doUpload2",method=RequestMethod.POST) public String doUploadFile2(MultipartHttpServletRequest multiRequest) throws IOException, Exception{ Iterator<String> filesNames = multiRequest.getFileNames(); while(filesNames.hasNext()){ String fileName = filesNames.next(); MultipartFile file = multiRequest.getFile(fileName); if(!file.isEmpty()){ FileUtils.copyInputStreamToFile(file.getInputStream(), new File("d:\\test", System.currentTimeMillis()+ file.getOriginalFilename())); } } return "success"; }}
这里用到FilesUtils 类 需要导入commons-io-2.4.jar 链接:点击打开链接
这样,配置就好了,浏览器中输入 http://www.localhost:8080/springMVCTest/courses/upload
选择文件,后提交,跳转到/WEB-IN/success.jsp
浏览器中输入 http://www.localhost:8080/springMVCTest/courses/upload?muti=true
提交后在 D\\test文件中发现上传成功
注意点:
1, commons-fileupload-1.3.1.jar
commons-io-2.4.jar 两个包必须导入
2,
还有 form中加入 enctype ="multipart/form-data"
3,在配置文件里一定要对multipart解析器的配置,否则会出现以下错误,调试了我一晚上。。。。
exceptionorg.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public java.lang.String com.cn.main.CourseController.doUploadFile2(org.springframework.web.multipart.MultipartHttpServletRequest) throws java.io.IOException,java.lang.Exception]; nested exception is java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: org.apache.catalina.connector.RequestFacade@54fd9d07org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)javax.servlet.http.HttpServlet.service(HttpServlet.java:650)javax.servlet.http.HttpServlet.service(HttpServlet.java:731)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
阅读全文
0 0
- springMVC实现单文件和多文件上传
- SpringMVC 单文件和多文件上传
- SpringMVC实现单文件上传
- SpringMVC多文件上传和单文件上传
- 使用springmvc的MultipartFile实现单文件和多文件上传
- SpringMVC单文件上传
- SpringMVC单文件上传
- springmvc单文件上传
- SpringMvc单文件上传
- SpringMVC单文件文件上传
- 单文件上传和多文件上传
- springmvc实现多文件上传
- springmvc实现多文件上传
- SpringMVC单文件上传与多文件上传
- SpringMVC单文件上传与多文件上传
- SpringMVC 单文件上传与多文件上传
- Retrofit2 & RxJava2实现单文件和多文件上传
- Sturts2 实现单文件和多文件的上传
- 支付安全注意事项
- 生日蛋糕 POJ
- java 创建数组的三种方法
- error: ‘__u32 __fswab32(__u32)’ cannot appear in a constant-expression
- discuzX搭建
- springMVC实现单文件和多文件上传
- Java集合中线程安全的类
- Java log4j详细教程
- MyEclipse下载地址
- http错误码含义
- jsp实现图片的上传和下载
- 自动化测试之接口测试Jmeter+robotframework+jenkins(已实现,改进中)
- vue-router 路由
- 指向指针的指针的用途