对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能。而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是pdf版的,会提供给用户进行下载的功能。相对于来说,这两个功能都是很常见。

完整的项目目录:https://codechina.csdn.net/dreaming_coder/springmvc-upload-download

1. 新建搭建SpringMVC开发环境

1.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.ice</groupId><artifactId>demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>14</maven.compiler.source><maven.compiler.target>14</maven.compiler.target></properties><dependencies><!--文件上传--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency><!--servlet-api导入高版本的--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.2</version></dependency></dependencies><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>
</project>

1.2 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--1.注册servlet--><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--通过初始化参数指定SpringMVC配置文件的位置,进行关联--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></init-param><!-- 启动顺序,数字越小,启动越早 --><load-on-startup>1</load-on-startup></servlet><!--所有请求都会被springmvc拦截 --><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping><filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 超时时间 --><session-config><session-timeout>15</session-timeout></session-config></web-app>

1.3 applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- mvc注解驱动 --><mvc:annotation-driven/><!-- 让Spring MVC不处理静态资源 --><mvc:default-servlet-handler/><!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 --><context:component-scan base-package="com.ice.controller"/><!--文件上传配置--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 --><property name="defaultEncoding" value="utf-8"/><!-- 上传文件大小上限,单位为字节(10485760=10M) --><property name="maxUploadSize" value="10485760"/><property name="maxInMemorySize" value="40960"/></bean><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/"/><!-- 后缀 --><property name="suffix" value=".jsp"/></bean></beans>

注意!!!这个 bean 的 id 必须为:multipartResolver , 否则上传文件会报 400400400 的错误!在这里栽过坑,教训!

2. 编写前端界面

2.1 index.jsp

前端表单要求:为了能上传文件,必须将表单的 method 设置为 POST,并将 enctype 设置为 multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。

对表单中的 enctype 属性做个详细的说明:

  • application/x-www=form-urlencoded:默认方式,只处理表单域中的 value 属性值,采用这种编码方式的表单会将表单域中的值处理成 URL 编码方式。
  • multipart/form-data:这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数中,不会对字符编码。
  • text/plain:除了把空格转换为 “+” 号外,其他字符都不做编码处理,这种方式适用直接通过表单发送邮件。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Upload</title>
</head>
<body>
<form action="/upload" enctype="multipart/form-data" method="post"><input type="file" name="file" multiple="multiple"/> <br/><br/><input type="submit" value="upload">
</form>
</body>
</html>

2.2 success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Success</title>
</head>
<body><h2>上传成功</h2><br><hr/><a href="/download">点击下载</a>
</body>
</html>

3. 编写 Controller

CommonsMultipartFile 的 常用方法:

  • String getOriginalFilename():获取上传文件的原名
  • InputStream getInputStream():获取文件流
  • void transferTo(File dest):将上传文件保存到一个目录文件中
package com.ice.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.commons.CommonsMultipartFile;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Arrays;@Controller
public class FileController {@RequestMapping("/upload")public String fileUpload2(@RequestParam("file") CommonsMultipartFile[] files, HttpServletRequest request) {//上传路径保存设置String path = request.getServletContext().getRealPath("/upload");File realPath = new File(path);if (!realPath.exists()) {realPath.mkdir();}//上传文件地址System.out.println("上传文件保存地址:" + realPath);Arrays.stream(files).forEach(file -> {try {file.transferTo(new File(realPath + "/" + file.getOriginalFilename()));} catch (IOException e) {e.printStackTrace();}});return "success";}@RequestMapping(value = "/download")public String downloads(HttpServletResponse response, HttpServletRequest request) throws Exception {//要下载的图片地址String path = request.getServletContext().getRealPath("/upload");String fileName = "小黄人.jpg";//1、设置response 响应头response.reset(); //设置页面不缓存,清空bufferresponse.setCharacterEncoding("UTF-8"); //字符编码response.setContentType("multipart/form-data"); //二进制传输数据//设置响应头response.setHeader("Content-Disposition","attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));File file = new File(path, fileName);//2、 读取文件--输入流InputStream input = new FileInputStream(file);//3、 写出文件--输出流OutputStream out = response.getOutputStream();byte[] buff = new byte[1024];int index = 0;//4、执行 写出操作while ((index = input.read(buff)) != -1) {out.write(buff, 0, index);out.flush();}out.close();input.close();return null;}
}

4. 测试启动 Tomcat

选择文件点击upload上传后:

打的war包结构如下:

【Spring】SpringMVC文件上传与下载相关推荐

  1. SpringMvc文件上传和下载

    最近博主在做SpringMvc文件上传和下载的功能实现,上网查了很多资料很多都不太符合理想,找啊找,终于找到一个可以用的,然后再此基础上,我加以改进,可以支持多文件上传,而且代码非常精简,大家可以看看 ...

  2. 全栈开发实战|Spring Boot文件上传与下载

    文件上传与下载是Web应用开发中常用的功能之一.接下来我们将讨论如何在Spring Boot的Web应用开发中,如何实现文件的上传与下载. 01.Spring Boot文件上传与下载 在实际的Web应 ...

  3. spring mvc文件上传与下载

    基于spring mvc注解: (1)导入jar包:ant.jar.commons-fileupload.jar.connom-io.jar. (2)在spring-mvc.xml中的配置 <! ...

  4. SpringMVC 文件上传及下载

    文件下载 inline 访问资源时如果没有设置响应头Content-Disposition,浏览器默认按照inline进行处理 inline:能显示就显示,不能显示就下载 响应头 只需修改响应头Con ...

  5. spring-mvc文件上传与下载

    上传: 下载: 所依赖的包: 核心servlet: applicationContext.xml: 转载于:https://www.cnblogs.com/mywawa/p/6970260.html

  6. Spring MVC数据转换、格式化、校验、文件上传和下载

    本篇文章主要分享下自己在学习Spring MVC数据转换.格式化和数据校验.Spring MVC文件上传和下载以及Spring MVC拦截器遇到的一些问题和读书笔记,希望对你有所帮助. @Compon ...

  7. Springmvc,Spring MVC文件上传

    Springmvc文件上传: 1.代码截图如下: 2.UploadController.java: package cn.csdn.controller;import java.io.File;imp ...

  8. java spring文件下载_SpringMVC实现文件上传和下载的工具类

    本文主要目的是记录自己基于SpringMVC实现的文件上传和下载的工具类的编写,代码经过测试可以直接运行在以后的项目中. 开发的主要思路是对上传和下载文件进行抽象,把上传和下载的核心功能抽取出来分装成 ...

  9. springMVC的文件上传于下载

    springMVC的文件上传于下载 1.springmvc 文件的上传也是借助于两个工具所以需要添加两个jarapache-commons-fileupload.jarapache-commons-i ...

最新文章

  1. ubuntu18.04安装CUDA10.0
  2. linux cmake 交叉编译配置 简介
  3. class? clazz参数_Java如何获取方法参数具体名称?这是个好问题!
  4. 支持向量回归预测怎么做_财务预测模型怎么做?这些关键指标,你一定要知道...
  5. java面向对象(this关键字)
  6. sed 和 awk 正则表达式
  7. 北京地铁票价查询系统 c++ Dijkstra算法
  8. 加ing形式的单词有哪些_动词ing形式变化规则有哪些
  9. python123随机密码生成器_python密码生成器的3种方法
  10. 在pdf上进行修改文字,PDF文字修改方法
  11. linux下怎么玩模拟人生4,《模拟人生4》典藏版晶锥灯在非游戏状态下的使用图文教程...
  12. ORA-39087: Directory Name Is Invalid
  13. 服务器系统里面怎么查看有没有做raid,windows如何查看服务器raid信息
  14. 识图在线识图_性感AI,在线赋能小程序
  15. 电脑耳机完全插进去声音听不清楚,插一半就是正常的?
  16. PBR 四 法线分布函数
  17. OpenCV学习笔记(十一)——图像噪声的生成(椒盐噪声、高斯噪声)
  18. python常用的镜像
  19. python 自动问答系统_外虎知乎自动问答系统
  20. Java码农怎样才能成为年薪60W的高级架构师进入BAT?

热门文章

  1. C++编程思想之迭代器
  2. hibernate mysql 例子_Hibernate的基本功能:对数据库的增删改查(创建对象实例)...
  3. html css加载不了_前端面试准备笔记之html和css(03)
  4. 步进电机不知道线序颜色的情况下如何区分线序
  5. matlab quantization 1 ~ 8 層
  6. 快手视频画质提升算法的探索和应用
  7. Andorid APK反逆向解决方案:梆梆加固原理探寻
  8. Mac电脑如何设置wifi热点及密码; 如何删除Wi-Fi密码
  9. 软件项目管理总结(1)软件项目管理概述
  10. 收集整理1-2个自己熟知的假设检验问题,并给出检验统计量的分布。