1. 如果是maven项目 需要在pom.xml文件里面引入下面两个jar
  1. <dependency>
  2. <groupId>commons-fileupload</groupId>
  3. <artifactId>commons-fileupload</artifactId>
  4. <version>1.3.1</version>
  5. </dependency>
  6.  
  7. <dependency>
  8. <groupId>commons-io</groupId>
  9. <artifactId>commons-io</artifactId>
  10. <version>2.0.1</version>
  11. </dependency>

版本可以选择最新的版本。

如果不是,需要手动添加jar包的话,需要导入下面两个jar包:

1、commons-fileupload-1.2.2.jar

2、commons-io-2.0.1.jar

jar包引入后,我们接下来需要去配置一下配置文件,在配置文件里面加入下面内容:

  1. <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
  2. <bean id="multipartResolver"
  3. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  4. <property name="defaultEncoding" value="UTF-8" />
  5. <!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
  6. <property name="maxUploadSize" value="-1" />
  7. </bean>
  8.  
  9. <!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException -->
  10. <!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->
  11. <bean id="exceptionResolver"
  12. class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  13. <property name="exceptionMappings">
  14. <props>
  15. <!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到XXX页面 -->
  16. <prop
  17. key="org.springframework.web.multipart.MaxUploadSizeExceededException">跳转XXX页面</prop>
  18. </props>
  19. </property>
  20. </bean>

接下来是上传页面jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme() + "://"
  6. + request.getServerName() + ":" + request.getServerPort()
  7. + path + "/";
  8. %>
  9.  
  10. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  11. <html>
  12. <head>
  13. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  14. <title>上传文件</title>
  15. </head>
  16. <body>
  17. <form action="<%=basePath%>upload.do" method="post"
  18. enctype="multipart/form-data">
  19. 上传文件:<input type="file" name="uploadfile">(如果是多文件可以继续添加多个file类型的input)
  20. <input type="submit" value="上传">
  21. </form>
  22. </body>
  23. </html>

Java类处理file

  1. package lcw.controller;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7.  
  8. import org.apache.commons.io.FileUtils;
  9. import org.springframework.stereotype.Controller;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RequestParam;
  12. import org.springframework.web.multipart.commons.CommonsMultipartFile;
  13.  
  14. /**
  15. *
  16. * 文件上传处理类
  17. *
  18. */
  19. @Controller
  20. public class FileController {
  21.  
  22. //单文件上传
  23. @RequestMapping(value = "/upload.do")
  24. public String queryFileData(
  25. @RequestParam("uploadfile") CommonsMultipartFile file,
  26. HttpServletRequest request) {
  27. // MultipartFile是对当前上传的文件的封装,当要同时上传多个文件时,可以给定多个MultipartFile参数(数组)
  28. if (!file.isEmpty()) {
  29. String type = file.getOriginalFilename().substring(
  30. file.getOriginalFilename().indexOf("."));// 取文件格式后缀名
  31. String filename = System.currentTimeMillis() + type;// 取当前时间戳作为文件名
  32. String path = request.getSession().getServletContext()
  33. .getRealPath("/upload/" + filename);// 存放位置
  34. File destFile = new File(path);
  35. try {
  36. // FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作,不需要额外的再去关闭IO流
  37. FileUtils
  38. .copyInputStreamToFile(file.getInputStream(), destFile);// 复制临时文件到指定目录下
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. return "redirect:upload_ok.jsp";
  43. } else {
  44. return "redirect:upload_error.jsp";
  45. }
  46. }
  47. }

如果是多文件的话,原理和上面相同,但是接收参数我们是用的CommonsMultipartFile数组

  1. package lcw.controller;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7.  
  8. import org.apache.commons.io.FileUtils;
  9. import org.springframework.stereotype.Controller;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RequestParam;
  12. import org.springframework.web.multipart.commons.CommonsMultipartFile;
  13.  
  14. /**
  15. *
  16. * 文件上传处理类
  17. *
  18. */
  19. @Controller
  20. public class FileController {
  21.  
  22. //单文件上传
  23. @RequestMapping(value = "/upload.do")
  24. public String queryFileData(
  25. @RequestParam("uploadfile") CommonsMultipartFile file,
  26. HttpServletRequest request) {
  27. // MultipartFile是对当前上传的文件的封装,当要同时上传多个文件时,可以给定多个MultipartFile参数(数组)
  28. if (!file.isEmpty()) {
  29. String type = file.getOriginalFilename().substring(
  30. file.getOriginalFilename().indexOf("."));// 取文件格式后缀名
  31. String filename = System.currentTimeMillis() + type;// 取当前时间戳作为文件名
  32. String path = request.getSession().getServletContext()
  33. .getRealPath("/upload/" + filename);// 存放位置
  34. File destFile = new File(path);
  35. try {
  36. // FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作,不需要额外的再去关闭IO流
  37. FileUtils
  38. .copyInputStreamToFile(file.getInputStream(), destFile);// 复制临时文件到指定目录下
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. return "redirect:upload_ok.jsp";
  43. } else {
  44. return "redirect:upload_error.jsp";
  45. }
  46. }
  47.  
  48. //多文件上传
  49. @RequestMapping(value = "/uploads.do")
  50. public String queryFileDatas(
  51. @RequestParam("uploadfile") CommonsMultipartFile[] files,
  52. HttpServletRequest request) {
  53. if (files != null) {
  54. for (int i = 0; i < files.length; i++) {
  55. String type = files[i].getOriginalFilename().substring(
  56. files[i].getOriginalFilename().indexOf("."));// 取文件格式后缀名
  57. String filename = System.currentTimeMillis() + type;// 取当前时间戳作为文件名
  58. String path = request.getSession().getServletContext()
  59. .getRealPath("/upload/" + filename);// 存放位置
  60. File destFile = new File(path);
  61. try {
  62. FileUtils.copyInputStreamToFile(files[i].getInputStream(),
  63. destFile);// 复制临时文件到指定目录下
  64. } catch (IOException e) {
  65. e.printStackTrace();
  66. }
  67. }
  68. return "redirect:upload_ok.jsp";
  69. } else {
  70. return "redirect:upload_error.jsp";
  71. }
  72.  
  73. }
  74.  
  75. }

SpringMVC上传文件总结的更多相关文章

  1. springmvc上传文件,抄别人的

    SpringMVC中的文件上传 分类: SpringMVC 2012-05-17 12:55 26426人阅读 评论(13) 收藏 举报 stringuserinputclassencoding 这是 ...

  2. 2. SpringMVC 上传文件操作

    1.创建java web项目:SpringMVCUploadDownFile 2.在项目的WebRoot下的WEB-INF的lib包下添加如下jar文件 com.springsource.com.mc ...

  3. 使用springMVC上传文件

    control层实现功能: @RequestMapping(value="upload2") public String upLoad2(HttpServletRequest re ...

  4. SpringMVC上传文件(图片)并保存到本地

    SpringMVC上传文件(图片)并保存到本地 小记一波~ 基本的MVC配置就不展示了,这里给出核心代码 在spring-mvc的配置文件中写入如下配置 <bean id="multi ...

  5. SpringMVC 上传文件 MultipartFile 转为 File

    在使用 SpringMVC 上传文件时,接收到的文件格式为 MultipartFile,但是在很多场景下使用都需要File格式的文件,记录下以便日后使用. 以下mFile为MultipartFile文 ...

  6. springmvc 上传文件时的错误

    使用springmvc上传文件一直失败,文件参数一直为null, 原来是配置文件没写成功. <bean id="multipartResolver" class=" ...

  7. SpringMVC上传文件的三种方式(转)

    直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/common ...

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

    直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/common ...

  9. SpringMVC上传文件

    SpringMVC中上传文件还是比较方便的,Spring内置了一些上传文件的支持类,不需要复杂的操作即可上传文件. 文件上传需要两个jar支持,一个是commons-fileupload.jar和co ...

随机推荐

  1. [深度学习] 各种下载深度学习数据集方法(In python)

    一.使用urllib下载cifar-10数据集,并读取再存为图片(TensorFlow v1.14.0) # -*- coding:utf-8 -*- __author__ = 'Leo.Z' imp ...

  2. head first 设计模式笔记5-单例模式

    目录: 1.单例模式(Singleton Pattern) 2.概念 3.饿汉式:不是延迟加载,加载类的时候直接初始化 4.懒汉式:延迟加载,首次需要使用的时候在实例化,需要考虑线程安全 5.静态内部 ...

  3. wx.setStorage、wx.getStorage和wx.getStorageSync

    Page({ data: { testnum:""//设置测试参数 }, test:function(){ var Num = this.data.testnum; wx.setS ...

  4. Spring boot之热部署

    springboot热部署 1.springloaded(热部署) 2.devtools(热部署) 一.springloaded 问题的提出: 在编写代码的时候,你会发现我们只是简单把打印信息改变了, ...

  5. LeetCode19----删除链表的指定元素

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

  6. 第八周课程总结 & 实验报告(六)

    第八周课程总结 一.包装类 介绍 装箱与拆箱 应用 二.异常 基本概念 基本格式 异常类的继承结构 throws关键字 throw关键字 Exception类和RuntimeException类 自定 ...

  7. 使用OMF特性

    Oracle 的OMF全称"Oracle managed file",关于这个概念的参考请自行查阅Oracle官方文档"Using Oracle-Managed File ...

  8. javascript - 事件详解(阻止事件冒泡+阻止事件行为)

    一.事件流 1.事件流 描述的是在页面中接受事件的顺序 2.事件冒泡 由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点 (最具体 –> 最不具体) 3.事件捕获 最不具体的节点先接收事 ...

  9. 11G 新特性之 密码延迟认证

    11G 新特性之 密码延迟认证 11G 新特性之 密码延迟认证 Table of Contents 1. 特性简述 2. 特性潜在引发问题 3. 关闭特性 1 特性简述 为了防止用户密码的暴力破解,从 ...

  10. jenkisn Pipeline的流水线发布,自动化部署

    创建一个流水线job,这只是个简单的流水线发布教程,写的不好~