最近的项目中用到了文件的上传和下载功能,任务分配给了其他的同时完成。如今项目结束告一段落,我觉着这个功能比较重要,因此特意把它提取出来自己进行了尝试。

一、 基础配置:

maven导包及配置pom.xml,导包时除开springmvc的基础依赖外,需要导入文件上传下载时用到的commons-io.jsr和commons-fileupload.jar:

  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>filLoadTest</groupId>
  5. <artifactId>filLoadTest</artifactId>
  6. <packaging>war</packaging>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>filLoadTest Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <build>
  11. <finalName>filLoadTest</finalName>
  12. <plugins>
  13. <!-- 以下配置可以保证每次强制更新时jre版本不会变化,那我的eclipse4.4.1,maven3.2.5为例,如果不设置这个,每次强制更新时jre就会变回1.5 -->
  14. <plugin>
  15. <artifactId>maven-compiler-plugin</artifactId>
  16. <version>2.3.2</version>
  17. <configuration>
  18. <source>1.7</source>
  19. <target>1.7</target>
  20. <encoding>UTF-8</encoding>
  21. <compilerArguments>
  22. <verbose />
  23. <bootclasspath>${java.home}\lib\rt.jar</bootclasspath>
  24. </compilerArguments>
  25. </configuration>
  26. </plugin>
  27. </plugins>
  28. </build>
  29. <dependencies>
  30. <dependency>
  31. <groupId>junit</groupId>
  32. <artifactId>junit</artifactId>
  33. <version>3.8.1</version>
  34. <scope>test</scope>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework</groupId>
  38. <artifactId>spring-webmvc</artifactId>
  39. <version>4.0.6.RELEASE</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>com.fasterxml.jackson.core</groupId>
  43. <artifactId>jackson-annotations</artifactId>
  44. <version>2.2.3</version>
  45. </dependency>
  46. <dependency>
  47. <groupId>com.fasterxml.jackson.core</groupId>
  48. <artifactId>jackson-core</artifactId>
  49. <version>2.2.3</version>
  50. </dependency>
  51. <dependency>
  52. <groupId>com.fasterxml.jackson.core</groupId>
  53. <artifactId>jackson-databind</artifactId>
  54. <version>2.2.3</version>
  55. </dependency>
  56. <dependency>
  57. <groupId>commons-fileupload</groupId>
  58. <artifactId>commons-fileupload</artifactId>
  59. <version>1.3.1</version>
  60. </dependency>
  61. <dependency>
  62. <groupId>commons-io</groupId>
  63. <artifactId>commons-io</artifactId>
  64. <version>2.4</version>
  65. </dependency>
  66. </dependencies>
  67. </project>

web.xml基础配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5. id="WebApp_ID" version="2.5">
  6. <filter>
  7. <description>字符集过滤器</description>
  8. <filter-name>encodingFilter</filter-name>
  9. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  10. <init-param>
  11. <description>字符集编码</description>
  12. <param-name>encoding</param-name>
  13. <param-value>UTF-8</param-value>
  14. </init-param>
  15. </filter>
  16. <filter-mapping>
  17. <filter-name>encodingFilter</filter-name>
  18. <url-pattern>/*</url-pattern>
  19. </filter-mapping>
  20. <servlet>
  21. <servlet-name>springMVC</servlet-name>
  22. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  23. <init-param>
  24. <param-name>contextConfigLocation</param-name>
  25. <param-value>classpath:spring.xml</param-value>
  26. </init-param>
  27. </servlet>
  28. <servlet-mapping>
  29. <servlet-name>springMVC</servlet-name>
  30. <url-pattern>*.do</url-pattern>
  31. </servlet-mapping>
  32. <welcome-file-list>
  33. <welcome-file>index.html</welcome-file>
  34. <welcome-file>index.htm</welcome-file>
  35. <welcome-file>index.jsp</welcome-file>
  36. <welcome-file>default.html</welcome-file>
  37. <welcome-file>default.htm</welcome-file>
  38. <welcome-file>default.jsp</welcome-file>
  39. </welcome-file-list>
  40. </web-app>

spring基础配置spring.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" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  11. http://www.springframework.org/schema/mvc
  12. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  13. <context:annotation-config />
  14. <mvc:annotation-driven />
  15. <context:component-scan base-package="controllers" />
  16. <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
  17. <bean id="mappingJacksonHttpMessageConverter"
  18. class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  19. <property name="supportedMediaTypes">
  20. <list>
  21. <value>text/html;charset=utf-8</value>
  22. </list>
  23. </property>
  24. </bean>
  25. <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
  26. <bean
  27. class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  28. <property name="messageConverters">
  29. <list>
  30. <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->
  31. </list>
  32. </property>
  33. </bean>
  34. <!-- 支持上传文件 -->
  35. <bean id="multipartResolver"
  36. class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
  37. <!-- 100M -->
  38. <property name="maxUploadSize" value="104857600"></property>
  39. <property name="defaultEncoding" value="utf-8"></property>
  40. </bean>
  41. </beans>

二、文件上传的代码

上传的简单页面index.html,要注意form表单提交时的entype的设置:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. </head>
  6. <body>
  7. <form action="./upLoadFile.do" method="post" enctype="multipart/form-data">
  8. 选择文件:<input type="file" name="file"/>
  9. <input type="submit" value="提交"/>
  10. </form>
  11. </body>
  12. </html>

上传对应的后台java代码,具体问题见注释:

  1. package controllers;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.Iterator;
  5. import javax.servlet.http.HttpServletRequest;
  6. import org.apache.commons.io.FileUtils;
  7. import org.springframework.http.HttpHeaders;
  8. import org.springframework.http.HttpStatus;
  9. import org.springframework.http.MediaType;
  10. import org.springframework.http.ResponseEntity;
  11. import org.springframework.stereotype.Controller;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestMethod;
  14. import org.springframework.web.bind.annotation.RequestParam;
  15. import org.springframework.web.multipart.MultipartFile;
  16. import org.springframework.web.multipart.MultipartHttpServletRequest;
  17. import org.springframework.web.multipart.commons.CommonsMultipartResolver;
  18. @Controller
  19. public class fileController {
  20. /**
  21. * 文件上传
  22. *
  23. * @author:tuzongxun
  24. * @Title: upLoadFile
  25. * @param @param file
  26. * @param @param request
  27. * @param @throws IllegalStateException
  28. * @param @throws IOException
  29. * @return void
  30. * @date Apr 28, 2016 1:22:00 PM
  31. * @throws
  32. */
  33. @RequestMapping(value = "/upLoadFile.do", method = RequestMethod.POST)
  34. public void upLoadFile(HttpServletRequest request)
  35. throws IllegalStateException, IOException {
  36. // @RequestParam("file") MultipartFile file,
  37. CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
  38. request.getSession().getServletContext());
  39. // 判断 request 是否有文件上传,即多部分请求
  40. if (multipartResolver.isMultipart(request)) {
  41. // 转换成多部分request
  42. MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
  43. // 取得request中的所有文件名
  44. Iterator<String> iter = multiRequest.getFileNames();
  45. while (iter.hasNext()) {
  46. // 取得上传文件
  47. MultipartFile f = multiRequest.getFile(iter.next());
  48. if (f != null) {
  49. // 取得当前上传文件的文件名称
  50. String myFileName = f.getOriginalFilename();
  51. // 如果名称不为“”,说明该文件存在,否则说明该文件不存在
  52. if (myFileName.trim() != "") {
  53. // 定义上传路径
  54. String path = "C:\\Users\\tuzongxun123\\Desktop\\"
  55. + myFileName;
  56. File localFile = new File(path);
  57. f.transferTo(localFile);
  58. }
  59. }
  60. }
  61. }
  62. }
  63. }

页面效果图如下,当选择文件提交后,便会看到选中的文件被传到了代码中指定的位置,这里是我的桌面上。

使用springMVC实现文件上传和下载之环境配置与上传的更多相关文章

  1. maven的不同版本下载及环境配置

    Maven不同版本下载及环境配置 Maven下载 去到官网 https://maven.apache.org/ 会发现是最新版本,但是一般下载的话,都会下载比最新的版本要低两到三个小版本的,这里就下载 ...

  2. SpringMVC 实现文件上传与下载,并配置异常页面

    目录 上传文件的表单要求 Spring MVC实现上传文件 需要导入的jar包 配置MultipartResolver解析器 编写接收上传文件的控制器 Spring MVC实现文件下载 下载文件时的h ...

  3. Unity5.2.1上Android真机调试环境配置

    下载SDK,JDK安装,配置JAVA环境 1.下载SDK,下载adt-bundle-windows-x86_64-20131030.zip,下载地址:http://pan.baidu.com/shar ...

  4. Goland环境配置——Goland上的第一个Go语言程序

    安装好goland后,开始编写一个简单程序测试环境是否可用. 新建项目:按File-new-project进入如图new project界面,在Go一栏内的Location里填写项目路径(D:\GOO ...

  5. Sagit.Framework For IOS 开发框架入门开发教程1:框架下载与环境配置

    背景: 前天开源了框架:开源:Sagit.Framework For IOS 开发框架 所以注定要追补一套开发教程了,所以尽量抽空了!!! 步骤 1:下载框架源码 GitHub:https://git ...

  6. JavaWeb开发Eclipse环境配置--史上最详细的教程

    [前言] JSP本身是JavaWeb中的知识,但是在学习Android网络时,必然要涉及到与服务器之间的交互,所以学一下JSP以及其他JavaWeb的内容还是很有必要的,至少能明白程序在访问服务器时, ...

  7. maven工程的下载及其环境配置

    Maven是一个项目管理工具,它给我们提供了好多有用的组件和工具. Maven下载: Maven下载载地址:http://maven.apache.org/download.cgi (1)进入下载界面 ...

  8. 手把手教windows上安装linux虚拟机及环境配置

    目录 版本说明 安装虚拟机 典型方式安装(推荐小白,带有图形界面,助于学习,但占用空间大) 自定义方式安装(推荐老司机) 创建快照 克隆虚拟机 windows上安装linux虚拟机不管是对于新人还是老 ...

  9. centos上部署flask项目之环境配置-MySQL的安装

    1.添加mysql 的yum源 wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'    rpm ...

随机推荐

  1. easy ui datagrid 中getSelections方法只能获取一行数据

    解决方案:设置  idField : "", // 设置标识

  2. three.js

    webgl,three.js交流的论坛,欢迎到里面提问问题 www.webglchina.cn

  3. 关于CSS3线型渐变这些事儿

    CSS3兼容各浏览器的线型渐变方法: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  4. Swift 02.Array

    数组可以存放任意类型,初始化时候的类型 决定了数组后面可以添加什么类型的元素 let 不可变数组 let arrayC = [,,,,,,] var 可变数组 var arrayM = [,,,,,, ...

  5. iOS开发拓展篇—音频处理(音乐播放器2)

    iOS开发拓展篇—音频处理(音乐播放器2) 说明:该文主要介绍音乐播放界面的搭建. 一.跳转 1.跳转到音乐播放界面的方法选择 (1)使用模态跳转(又分为手动的和自动的) (2)使用xib并设置跳转 ...

  6. Oracle中建立表

    -- Create table create table STUDENT( sno VARCHAR2(3) not null, sname VARCHAR2(8) not null, ssex VAR ...

  7. IT公司100题-32-交换元素,使数组差最小

    问题描述: 有两个整数序列a, b,大小都为n, 序列元素的值任意整数,无序. 要求:通过交换a, b 中的元素,使得sum(a)-sum(b),差最小. 例如: var a=[80, 40, 60, ...

  8. Apache代理Tomcat实现session共享构建网上商城系统

    一.环境介绍 二.安装配置后端服务器 三.安装配置前端服务器 四.配置Tomcat服务器实现session共享 五.构建网上商城系统 一.环境介绍 系统版本:CentOS 6.4_x86_64 Mys ...

  9. The data is said to include information from networks

    The data is said to include information from networks as well as from individual computers and smart ...

  10. 《Java中方法的重写》

    //方法的重写 /* 注意:方法的重写要遵循“两同两小一大”规则 “两同”即方法名相同.形参列表相同: “两小”(1)指的是子类方法返回值类型比父类方法的返回值类型更小或相等,[什么意思?] (2)子 ...