Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

第一步:1. spring使用了apache-commons下得上传组件,因此,我们需要引入两个jar包:

  1. apache-commons-fileupload.jar
  2. apache-commons-io.jar

第二步:2.  在springmvc-servlet.xml配置文件中,增加CommonsMultipartResoler配置:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xmlns:mvc="http://www.springframework.org/schema/mvc"
  7. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  8. xsi:schemaLocation="http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context.xsd
  12. http://www.springframework.org/schema/mvc
  13. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
  14.  
  15. <!-- 扫描包 -->
  16. <context:component-scan base-package="com.tgb.web.controller.annotation"/>
  17.  
  18. <!-- 启用注解包 -->
  19. <mvc:annotation-driven/>
  20.  
  21. <!-- 被上面替代
  22. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>
  23. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
  24. -->
  25.  
  26. <!-- 视图解析器 -->
  27. <bean id="viewResolver"
  28. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  29. <property name="prefix" value="/" />
  30. <property name="suffix" value=".jsp" />
  31. </bean>
  32.  
  33. <!-- 上传配置文件 -->
  34.  
  35. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  36. <!-- 默认编码 (ISO-8859-1) -->
  37. <property name="defaultEncoding" value="utf-8"/>
  38. <!-- 最大文件大小,-1为无限止(-1) -->
  39. <property name="maxUploadSize" value="20000000000"/>
  40. <!-- 最大内存大小 (10240)-->
  41. <property name="maxInMemorySize" value="200000"/>
  42. </bean>
  43. <!-- 静态资源访问 -->
  44.  
  45. <!-- <mvc:resources location="/images/" mapping="/images/**"/>-->
  46.  
  47. </beans>

第三步:配置web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7.  
  8. <welcome-file-list>
  9. <welcome-file>index.jsp</welcome-file>
  10. </welcome-file-list>
  11.  
  12. <servlet>
  13. <servlet-name>springMVC</servlet-name>
  14. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  15. <init-param>
  16. <param-name>contextConfigLocation</param-name>
  17. <param-value>classpath*:config/springMVC-servlet.xml</param-value>
  18. </init-param>
  19. <load-on-startup>1</load-on-startup>
  20. </servlet>
  21.  
  22. <!-- 解决乱码 -->
  23. <filter>
  24. <filter-name>encodingFilter</filter-name>
  25. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  26. <init-param>
  27. <param-name>encoding</param-name>
  28. <param-value>UTF-8</param-value>
  29. </init-param>
  30. <init-param>
  31. <param-name>froceEncoding</param-name>
  32. <param-value>true</param-value>
  33. </init-param>
  34. </filter>
  35.  
  36. <filter-mapping>
  37. <filter-name>encodingFilter</filter-name>
  38. <url-pattern>/*</url-pattern>
  39. </filter-mapping>
  40.  
  41. <servlet-mapping>
  42. <servlet-name>springMVC</servlet-name>
  43. <url-pattern>/</url-pattern>
  44. </servlet-mapping>
  45. </web-app>

第四步:建立upload.jsp页面,内容如下:

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6.  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11.  
  12. <title>测试springmvc中上传的实现</title>
  13. <meta http-equiv="pragma" content="no-cache">
  14. <meta http-equiv="cache-control" content="no-cache">
  15. <meta http-equiv="expires" content="0">
  16. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  17. <meta http-equiv="description" content="This is my page">
  18. <!--
  19. <link rel="stylesheet" type="text/css" href="styles.css">
  20. -->
  21. </head>
  22.  
  23. <body>
  24. <form action="uploadContoller?toupload" method="post" enctype="multipart/form-data">
  25. 文件上传:<input type="file" value="" name="file">
  26. <input type="submit" value="上传"/>
  27. </form>
  28. </body>
  29. </html>

建立控制器UploadContoller.java(三种方法支持文件上传),代码如下:

  1. package com.tgb.web.controller.annotation;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.util.Date;
  9. import java.util.Iterator;
  10.  
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13.  
  14. import org.springframework.stereotype.Controller;
  15. import org.springframework.web.bind.annotation.RequestMapping;
  16. import org.springframework.web.bind.annotation.RequestParam;
  17. import org.springframework.web.multipart.MultipartFile;
  18. import org.springframework.web.multipart.MultipartHttpServletRequest;
  19. import org.springframework.web.multipart.commons.CommonsMultipartFile;
  20. import org.springframework.web.multipart.commons.CommonsMultipartResolver;
  21.  
  22. @Controller
  23. @RequestMapping("/uploadContoller")
  24. public class UploadContoller {
  25.  
  26. //========================第一种:======================
  27. @RequestMapping(params="uploadUser")
  28. // 普通上传
  29. public String uploadUser(@RequestParam("file") CommonsMultipartFile file,
  30. HttpServletRequest request, HttpServletResponse response)
  31. throws IOException {
  32. System.out.println("filename++++++++" + file.getOriginalFilename());
  33. if (!file.isEmpty()) {
  34. try {
  35. Date date = new Date();
  36.  
  37. FileOutputStream os = new FileOutputStream("../images"
  38. + date.getTime() + file.getOriginalFilename());
  39. InputStream in = file.getInputStream();
  40. int b = 0;
  41. while ((b = in.read()) != -1) {
  42. os.write(b);
  43. }
  44. os.flush();
  45. os.close();
  46. in.close();
  47. } catch (FileNotFoundException e) {
  48. // TODO Auto-generated catch block
  49. e.printStackTrace();
  50. }
  51. }
  52. return "success";
  53. }
  54.  
  55. //========================第二种:======================
  56. @RequestMapping(params="toupload")
  57. public String toupload(HttpServletRequest request,
  58. HttpServletResponse response) {
  59.  
  60. // 创建一个通用的多部分解析器
  61. CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
  62. request.getSession().getServletContext());
  63. // 判断 request 是否有文件上传,即多部分请求
  64. if (multipartResolver.isMultipart(request)) {
  65. // 转换成多部分request
  66. MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
  67. // 取得request中的所有文件名
  68. Iterator<String> iter = multiRequest.getFileNames();
  69. while (iter.hasNext()) {
  70. // 记录上传过程起始时的时间,用来计算上传时间
  71. int pre = (int) System.currentTimeMillis();
  72. // 取得上传文件
  73. MultipartFile file = multiRequest.getFile(iter.next());
  74. if (file != null) {
  75. // 取得当前上传文件的文件名称
  76. String myFileName = file.getOriginalFilename();
  77. // 如果名称不为“”,说明该文件存在,否则说明该文件不存在
  78. if (myFileName.trim() != "") {
  79. System.out.println(myFileName);
  80. // 重命名上传后的文件名
  81. String fileName = "demoUpload"
  82. + file.getOriginalFilename();
  83. // 定义上传路径
  84. String path = "/images/" + fileName;
  85. File localFile = new File(path);
  86. try {
  87. file.transferTo(localFile);
  88. } catch (IllegalStateException e) {
  89. // TODO Auto-generated catch block
  90. e.printStackTrace();
  91. } catch (IOException e) {
  92. // TODO Auto-generated catch block
  93. e.printStackTrace();
  94. }
  95. }
  96. }
  97. // 记录上传该文件后的时间
  98. int finaltime = (int) System.currentTimeMillis();
  99. System.out.println(finaltime - pre);
  100. }
  101.  
  102. }
  103.  
  104. return "success";
  105. }
  106.  
  107. //========================第三种:======================
  108. @RequestMapping(params="niceupload")
  109. // 优化上传
  110. public String niceupload(HttpServletRequest request,
  111. HttpServletResponse response) {
  112. CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
  113. request.getSession().getServletContext());
  114. if (multipartResolver.isMultipart(request)) {
  115. MultipartHttpServletRequest mulitRequest = (MultipartHttpServletRequest) (request);
  116. Iterator<String> iterator = mulitRequest.getFileNames();
  117. while (iterator.hasNext()) {
  118.  
  119. MultipartFile fiel = mulitRequest.getFile((String) iterator
  120. .next());
  121. if (fiel != null) {
  122. String fileName = "demoUpload" + fiel.getOriginalFilename();
  123. String path = "D:/" + fileName;
  124. File localfile = new File(path);
  125. try {
  126. fiel.transferTo(localfile);
  127. } catch (IllegalStateException e) {
  128. // TODO Auto-generated catch block
  129. e.printStackTrace();
  130. } catch (IOException e) {
  131. // TODO Auto-generated catch block
  132. e.printStackTrace();
  133. }
  134. }
  135. }
  136. }
  137. return "/success";
  138. }
  139.  
  140. }

5. 建立success.jsp页面

  1. <%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
  2. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6. <title>传递参数</title>
  7.  
  8. </head>
  9.  
  10. <body>
  11.  
  12. <h1>上传成功 +++++++++++</h1>
  13.  
  14. </body>
  15. </html>
  1. 发布项目,运行测试:http://localhost:8080/springmvc03/upload.jsp

3、  进入项目发布后的目录,发现文件上传成功:

  1. 您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态。
  2.  
  3. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦
  4.  
  5. 如果您对文章内容有任何疑问, 可以通过评论或发邮件的方式联系我: 2276292708@qq.com或加入JAVA技术交流群:306431857
  6.  
  7. 如果需要转载,请注明出处,谢谢!!

基于spring 3.0mvc 框架的文件上传实现的更多相关文章

  1. 基于Spring Mvc实现的Excel文件上传下载

    最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库.因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例. 基础框架 之前曾经介绍过一个最简单的spring ...

  2. 关于我使用spring mvc框架做文件上传时遇到的问题

    非常感谢作者 原文:https://blog.csdn.net/lingirl/article/details/1714806 昨天尝试着用spring mvc框架做文件上传,犯了挺多不该犯的毛病问题 ...

  3. SpringMVC框架06——文件上传与下载

    1.文件上传 Spring MVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过Spring MVC框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现. ...

  4. jersey框架实现文件上传

    jersey框架是一个开源的RESTful的框架,实现了实现了JAX-RS规范,进一步地简化 RESTful service 和 client 开发.当然而且是必须的,jersey对文件的上传和下载也 ...

  5. layUI框架中文件上传前后端交互及遇到的相关问题

    下面我将讲述一下我在使用layUI框架中文件上传所遇到的问题: 前端jsp页面: <div class="layui-form-item"> <label cla ...

  6. 使用SpringMVC框架实现文件上传和下载功能

    使用SpringMVC框架实现文件上传和下载功能 (一)单个文件上传 ①配置文件上传解释器 <!—配置文件上传解释器 --> <mvc:annotation-driven>&l ...

  7. RPC基于http协议通过netty支持文件上传下载

    本人在中间件研发组(主要开发RPC),近期遇到一个需求:RPC基于http协议通过netty支持文件上传下载 经过一系列的资料查找学习,终于实现了该功能 通过netty实现文件上传下载,主要在编解码时 ...

  8. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

  9. 笨鸟先飞之Java(一)--使用struts2框架实现文件上传

    无论是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个经常使用功能会有非常多种解决方案,可是struts2的框架却能给我们一个比較简单的方式,以下就一起来看吧: ...

随机推荐

  1. iOS UI03_LTView

    // //  LTView.h //  OC03_LTView // //  Created by dllo on 15/7/31. //  Copyright (c) 2015年 dllo. All ...

  2. 多个client与一个server端通信的问题

    多个client与一个server端通信的问题 上篇博文主要是讲的关于client与server端的通信问题.在上篇博文中当我们仅仅有一个client訪问我们的server时是能够正常执行的,可是当我 ...

  3. 【bzoj3676】[Apio2014]回文串 —— 回文自动机的学习

    写题遇上一棘手的题,[Apio2014]回文串,一眼看过后缀数组+Manacher.然后就码码码...过是过了,然后看一下[Status],怎么慢这么多,不服..然后就搜了一下,发现一种新东西——回文 ...

  4. javascript总结03

  5. 在64位的ubuntu 14.04 上开展32位Qt 程序开发环境配置(pro文件中增加 QMAKE_CXXFLAGS += -m32 命令)

    为了能中一个系统上开发64或32位C++程序,费了些周折,现在终于能够开始干过了.在此记录此时针对Q5.4版本的32位开发环境配置过程. 1. 下载Qt 5.4 的32位版本,进行安装,安装过程中会发 ...

  6. flash、flex builder、flash builder、 air的关系

    flash VS flex builder flash被adobe收购的时候是flash8,已经可以AS2面向对象了. 而被adobe收购后,adobe准备把flash打造成一个开发工具.就比如JBU ...

  7. hive时间

    Hive中日期函数总结:1.时间戳函数日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数select unix_timestamp(); --获得当前时区的UNIX时间戳s ...

  8. 什么是需求Bug、设计Bug、功能bug?

    首先什么是需求Bug.设计Bug.功能bug? 需求Bug,指由于客户需求描述不清晰或错误.需求收集人员自身原因及需求本身模糊难于分析.获取等原因,导致客户需求获取不准确,后期产品不能满足客户.用户的 ...

  9. 利用 BASE64Encoder 对字符串进行加密 BASE64Decoder进行解密

    转自:https://blog.csdn.net/chenyongtu110/article/details/51694323

  10. 【409】Linux 系统 Testrun

    文件名:Testrun #!/bin/sh PROG=./puzzle case $1 in 1) T=Tests/bad* ;; 2) T=Tests/sol* ;; 3) T=Tests/unso ...