SpringMVC实现文件上传需要加入jar包,commons-fileupload-1.3.1.jar,commons-io-2.2.jar

项目目录树:

pom.xml加入需要的包

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>springMVC</groupId>
  5. <artifactId>springmvc01</artifactId>
  6. <packaging>war</packaging>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>springmvc01 Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <dependencies>
  11. <dependency>
  12. <groupId>junit</groupId>
  13. <artifactId>junit</artifactId>
  14. <version>3.8.1</version>
  15. <scope>test</scope>
  16. </dependency>
  17.  
  18. <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
  19. <dependency>
  20. <groupId>org.springframework</groupId>
  21. <artifactId>spring-webmvc</artifactId>
  22. <version>4.3.2.RELEASE</version>
  23. </dependency>
  24.  
  25. <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
  26. <dependency>
  27. <groupId>javax.servlet</groupId>
  28. <artifactId>jstl</artifactId>
  29. <version>1.2</version>
  30. </dependency>
  31.  
  32. <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
  33. <dependency>
  34. <groupId>com.fasterxml.jackson.core</groupId>
  35. <artifactId>jackson-core</artifactId>
  36. <version>2.7.3</version>
  37. </dependency>
  38.  
  39. <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
  40. <dependency>
  41. <groupId>com.fasterxml.jackson.core</groupId>
  42. <artifactId>jackson-annotations</artifactId>
  43. <version>2.7.3</version>
  44. </dependency>
  45.  
  46. <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
  47. <dependency>
  48. <groupId>com.fasterxml.jackson.core</groupId>
  49. <artifactId>jackson-databind</artifactId>
  50. <version>2.7.3</version>
  51. </dependency>
  52.  
  53. <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
  54. <dependency>
  55. <groupId>org.hibernate</groupId>
  56. <artifactId>hibernate-validator</artifactId>
  57. <version>5.2.4.Final</version>
  58. </dependency>
  59.  
  60. <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
  61. <dependency>
  62. <groupId>commons-fileupload</groupId>
  63. <artifactId>commons-fileupload</artifactId>
  64. <version>1.3.1</version>
  65. </dependency>
  66.  
  67. </dependencies>
  68. <build>
  69. <finalName>springmvc01</finalName>
  70. </build>
  71. </project>

web.xml配置

  1. <!DOCTYPE web-app PUBLIC
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" >
  4.  
  5. <web-app>
  6.  
  7. <!-- 注册字符集Filter -->
  8. <filter>
  9. <filter-name>characterEncodingFiter</filter-name>
  10. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  11. <init-param>
  12. <param-name>encoding</param-name>
  13. <param-value>GBK</param-value>
  14. </init-param>
  15. <init-param>
  16. <param-name>forceEncoding</param-name>
  17. <param-value>true</param-value>
  18. </init-param>
  19. </filter>
  20. <filter-mapping>
  21. <filter-name>characterEncodingFiter</filter-name>
  22. <url-pattern>/*</url-pattern>
  23. </filter-mapping>
  24.  
  25. <!-- 注册springMVC中央调度器 -->
  26. <servlet>
  27. <servlet-name>springMVC</servlet-name>
  28. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  29. <init-param>
  30. <param-name>contextConfigLocation</param-name>
  31. <param-value>classpath:spring-mvc.xml</param-value>
  32. </init-param>
  33. <load-on-startup>1</load-on-startup>
  34. </servlet>
  35. <servlet-mapping>
  36. <servlet-name>springMVC</servlet-name>
  37. <url-pattern>/</url-pattern>
  38. </servlet-mapping>
  39.  
  40. </web-app>

spring-mvc.xml SpringMVC的配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/mvc
  8. http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
  9. http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context-4.0.xsd">
  13.  
  14. <!-- 扫描注解 -->
  15. <context:component-scan base-package="com.orange.controller" />
  16.  
  17. <!-- 注册multipart解析器,这个id是固定的,由DispatcherServlet直接调用 -->
  18. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  19. <property name="defaultEncoding" value="GBK" />
  20. <property name="maxUploadSize" value="102400"></property>
  21. <!-- 改属性延迟解析,当进入Controller时开始解析,这样就可以捕获到异常,否则由SpringMVC抛出异常时无法捕获 -->
  22. <property name="resolveLazily" value="true"></property>
  23. </bean>
  24. </beans>

控制器UploadController.java

  1. package com.orange.controller;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpSession;
  8.  
  9. import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.ExceptionHandler;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestParam;
  14. import org.springframework.web.multipart.MaxUploadSizeExceededException;
  15. import org.springframework.web.multipart.MultipartFile;
  16. import org.springframework.web.servlet.ModelAndView;
  17.  
  18. @Controller
  19. @RequestMapping(value="/upload")
  20. public class UploadController {
  21.  
  22. @RequestMapping(value="/upload")
  23. public String doUpload(@RequestParam MultipartFile photo, HttpSession session) throws Exception{
  24.  
  25. if(!photo.isEmpty()){
  26. String path = session.getServletContext().getRealPath("/upload");
  27. String fileName = photo.getOriginalFilename();
  28. if(fileName.endsWith(".jpg") || fileName.endsWith(".png")){
  29. File file = new File(path, fileName);
  30.  
  31. photo.transferTo(file);
  32. } else {
  33. return "/fail.jsp";
  34. }
  35. }
  36.  
  37. return "/success.jsp";
  38. }
  39. //拦截异常,当上传文件的大小超过1024 1M时会抛出MaxUploadSizeExceededException
  40. @ExceptionHandler(MaxUploadSizeExceededException.class)
  41. public ModelAndView exceptionUpload(Exception ex) throws Exception{
  42. ModelAndView mav = new ModelAndView();
  43. mav.addObject("ex", ex);
  44. mav.setViewName("/fail.jsp");
  45. return mav;
  46. }
  47. }

需要在webapp下创建目录upload

测试:上传图片

修改SpringMVC的配置文件spring-mvc.xml,把上传限制为1024,这时上传的文件大于1024,或抛出异常

  1. <property name="maxUploadSize" value="1024"></property>

注意点:必须在spring-mvc.xml注册umltipart解析器时,配置<property name="resolveLazily" value="true"></property>,否则无法使用异常处理器拦截异常,应该不配置时,

是由springmvc框架抛出异常,无法拦截,但配置后,会延迟解析,进入Controller时才解析抛出异常,这时注册异常处理器就可以拦截到

如果上传多个文件,修改Controller中的配置为

  1. package com.orange.controller;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpSession;
  8.  
  9. import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.ExceptionHandler;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestParam;
  14. import org.springframework.web.multipart.MaxUploadSizeExceededException;
  15. import org.springframework.web.multipart.MultipartFile;
  16. import org.springframework.web.servlet.ModelAndView;
  17.  
  18. @Controller
  19. @RequestMapping(value="/upload")
  20. public class UploadController {
  21.  
  22. @RequestMapping(value="/upload")
  23. public String doUpload(@RequestParam MultipartFile[] photo, HttpSession session) throws Exception{
  24.  
  25. for(int i=0; i<photo.length; i++){
  26. if(!photo[i].isEmpty()){
  27. String path = session.getServletContext().getRealPath("/upload");
  28. String fileName = photo[i].getOriginalFilename();
  29. if(fileName.endsWith(".jpg") || fileName.endsWith(".png")){
  30. File file = new File(path, fileName);
  31.  
  32. photo[i].transferTo(file);
  33. } else {
  34. return "/fail.jsp";
  35. }
  36. }
  37. }
  38.  
  39. return "/success.jsp";
  40. }
  41.  
  42. @ExceptionHandler(MaxUploadSizeExceededException.class)
  43. public ModelAndView exceptionUpload(Exception ex) throws Exception{
  44. ModelAndView mav = new ModelAndView();
  45. mav.addObject("ex", ex);
  46. mav.setViewName("/fail.jsp");
  47. return mav;
  48. }
  49. }

修改上传upload.jsp

  1. <%@ page language="java" contentType="text/html; charset=GBK"
  2. pageEncoding="GBK"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
  4. <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  5. <%
  6. String path = request.getContextPath();
  7. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  8. %>
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  10. <html>
  11. <head>
  12. <meta http-equiv="Content-Type" content="text/html; charset=GBK">
  13. <base href="<%=basePath %>">
  14. <title>Default Page</title>
  15. </head>
  16. <body>
  17.  
  18. <div>
  19. <form action="upload/upload" enctype="multipart/form-data" method="post">
  20. 照片:<input type="file" name="photo"><br>
  21. 照片:<input type="file" name="photo"><br>
  22. 照片:<input type="file" name="photo"><br>
  23. 照片:<input type="file" name="photo"><br>
  24. 照片:<input type="file" name="photo"><br>
  25. <input type="submit" value="上传">
  26. </form>
  27. </div>
  28.  
  29. </body>
  30. </html>

修改spring-mvx.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/mvc
  8. http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
  9. http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context-4.0.xsd">
  13.  
  14. <!-- 扫描注解 -->
  15. <context:component-scan base-package="com.orange.controller" />
  16.  
  17. <!-- 注册multipart解析器,这个id是固定的,由DispatcherServlet直接调用 -->
  18. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  19. <property name="defaultEncoding" value="GBK" />
  20. <!-- 上传的文件总大小 -->
  21. <property name="maxUploadSize" value="1024000000"></property>
  22. <!-- 每个上传的文件的大小 -->
  23. <property name="maxUploadSizePerFile" value="102400"></property>
  24. <!-- 改属性延迟解析,当进入Controller时开始解析,这样就可以捕获到异常,否则由SpringMVC抛出异常时无法捕获 -->
  25. <property name="resolveLazily" value="true"></property>
  26. </bean>
  27. </beans>

多文件上传这里就不在演示了

SpringMVC学习笔记八:文件上传及多个文件上传的更多相关文章

  1. SpringMVC学习笔记八:文件上传下载(转)

    转自:http://www.cnblogs.com/WJ-163/p/6269409.html 一.关键步骤 ①引入核心JAR文件 SpringMVC实现文件上传,需要再添加两个jar包.一个是文件上 ...

  2. SpringMVC:学习笔记(8)——文件上传

    SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...

  3. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  4. 史上最全的SpringMVC学习笔记

    SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...

  5. springmvc学习笔记(简介及使用)

    springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...

  6. SpringMVC学习笔记之二(SpringMVC高级参数绑定)

    一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...

  7. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  8. springmvc学习笔记(常用注解)

    springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...

  9. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

随机推荐

  1. 在阿里做了5年技术Leader,我总结出这些套路!

    转自 51CTO技术栈 内容 团队建设 团队管理 团队文化 沟通与辅导 招聘与解雇 互联网公司的技术团队管理通常分为两个方向:技术管理和团队管理,互联网公司的技术 TL 与传统软件公司的 PM 还是有 ...

  2. docker---设置镜像加速器

    国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器,国内很多云服务商都提供了国内加速器服务,如: Azure 中国镜像: https://dockerhub.azk8s.cn ...

  3. py02_03:py的数据类型

    数据类型初识 1. 整数(int) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...

  4. 数据分析基础-jupyter notebook-Anaconda-Numpy

    数据分析介绍 1.数据分析是什么? 2.数据分析能干什么? 3.为什么利用Python进行数据分析? 4.数据分析过程概述 5.常用库简介 1.数据分析是什么? 数据分析是指用适当的统计分析方法对收集 ...

  5. Ubuntu源码编译安装tensorflow

    ubuntu14 cuda9.0_384.81 驱动版本384.90  cudnn7.2 tensorflow1.8 https://blog.csdn.net/pkokocl/article/det ...

  6. FullPage.js中文帮助文档API

    fullPage.js的方法: 1. moveSectionUp() 功能:向上滚动一页. 2. moveSectionDown() 功能:向下滚动一页. 3. moveTo(section, sli ...

  7. 四十三、LAMP与LNMP web架构深度优化实战-第二部

    1. 配置nginx gzip压缩功能    服务器对发出的内容进行压缩,带宽少了,体验好,速度快,但是服务端压,会使cpu使用高,压缩比高的进行压缩:文本.程序文件.数据文件.图片视频不要压缩,一般 ...

  8. PAT甲级——1005.SpellItRight(20分)

    Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output e ...

  9. Java之关键字abstract(抽象类与抽象方法)

    /* * abstract关键字的使用 * 1.abstract:抽象的 * 2.abstract可以用来修饰的结构:类.方法 * * 3. abstract修饰类:抽象类 * > 此类不能实例 ...

  10. 一篇文章带你了解axios网络交互-Vue

    来源:滁州SEO 1 **什么是axios呢?**了解,并去使用它,对于axios发送请求的两种方式有何了解,以及涉及axios跨域问题如何解决. 对于axios网络交互,去使用axios的同时,首先 ...