在web开发中一般会有文件上传的操作
一般JavaWeb开发中文件上传使用的 Apache组织的Commons FileUpload组件
SpringMVC中使用 MultipartFile file对象接受上传文件,必须保证 后台参数的名称和表单提交的文件的名称一致

文件上传必须条件
1.表单必须post
2.表单必须有 file 文件域
3.表单的 enctype=“multipart/form-data”

需要用到的jar包

web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"><!-- 设置请求参数字符编码过滤 --><filter><filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name><url-pattern>\/*</url-pattern></filter-mapping><servlet><servlet-name>MVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>MVC</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping></web-app>

springmvc.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:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsdhttp://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-4.3.xsd"><!-- 包扫描 --><context:component-scan base-package="com.ywq.springmvc"></context:component-scan><!-- 注解驱动 -->  <mvc:annotation-driven/><!-- 配置文件上传解析器 multipartResolver因为文件上传解析器是SpringMVC框架运行的非核心组件只有开发者使用时候才创建,一个项目中上传文件的地方偶尔也就一两个       --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="#{1024*1024*5}"></property></bean></beans>
后台jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
后台首页
</body>
</html>
文件上传jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><span style="color: red;">${msg}</span>
<fieldset><legend>单个文件上传</legend><form action="${pageContext.request.contextPath}/upload.do" method="post" enctype="multipart/form-data">姓名: <input name="username"><br>头像: <input type="file" name="headImg"><br><button type="submit">提交</button></form></fieldset><fieldset><legend>多个文件上传</legend><form action="${pageContext.request.contextPath}/uploads.do" method="post" enctype="multipart/form-data">文件1: <input type="file" name="headImgs"><br>文件2: <input type="file" name="headImgs"><br>文件3: <input type="file" name="headImgs"><br><button type="submit">提交</button></form></fieldset>

SpringMVC中使用 MultipartFile file对象接受上传文件,必须保证 后台方法MultipartFile 参数的名称和表单提交的文件的名称一致

文件上传控制层代码

package com.ywq.springmvc.controller;import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;import org.apache.commons.io.FilenameUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;@Controller
public class FileUploadController {/** * SpringMVC框架已经对文件上传接收完成处理,是对Apache的FileUpload文件上传组件的集成* * 开发之在接收上传的文件注入:MultipartFile即可* 实现类:org.springframework.wbe.multipart.commons.CommonsMultipartFile* * 注意:注入的参数名称必须和前台表单的名称一致* * */private List<String> mimeTypes = Arrays.asList("image/jpeg","image/png");@RequestMapping("/upload")public String update( String username,MultipartFile headImg,Model m ) {System.out.println(username);System.out.println(headImg);System.out.println(headImg.getName());//表单名称    System.out.println(headImg.getOriginalFilename());//文件名称System.out.println(headImg.getContentType());//获取文件MIME类型/** 什么是MIME文件?*  计算机上所有文件都有文件类型,这个文件类型就叫做MIME类型*  MIME的格式 xxxx/xxx*  *  常见文件MIME类型*      .jpg --->image/jpeg*     .png --->image/png*      .html --->text/html*  *  使用MIME可以对文件上传的文件内容进行判断,比如:只能上传图片* * *///文件类型判断if (!mimeTypes.contains(headImg.getContentType())) {m.addAttribute("msg", "文件必须是jpg或者png格式");return "/upload.jsp";}//将上传的文件保存到服务器的某一块磁盘位置//文件上传的目录File parent = new File("d:/linshi");if (!parent.exists()) {parent.mkdir(); //创建单级目录//parent.mkdirs()//创建多级目录}//获取上传的文件的后缀String extension = FilenameUtils.getExtension(headImg.getOriginalFilename());//创建新的文件名称String newFilename = UUID.randomUUID().toString().replaceAll("-", "")+"."+extension;File dest = new File(parent, newFilename);try {//上传文件headImg.transferTo(dest);} catch (IllegalStateException | IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "/main.jsp";}@RequestMapping("/uploads")public String updates( String username,MultipartFile[] headImgs,Model m ) {//将上传的文件保存到服务器的某一块磁盘位置//文件上传的目录File parent = new File("d:/linshi");if (!parent.exists()) {parent.mkdir(); //创建单级目录//parent.mkdirs()//创建多级目录}for (MultipartFile headImg : headImgs) {//文件类型判断if (!mimeTypes.contains(headImg.getContentType())) {m.addAttribute("msg", "文件必须是jpg或者png格式");return "/upload.jsp";}//获取上传的文件的后缀String extension = FilenameUtils.getExtension(headImg.getOriginalFilename());//创建新的文件名称String newFilename = UUID.randomUUID().toString().replaceAll("-", "")+"."+extension;File dest = new File(parent, newFilename);try {//上传文件headImg.transferTo(dest);} catch (IllegalStateException | IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return "/main.jsp";}
}

文件下载,SpringMVC并没有做过多的封装,还是使用原来的下载方式

JavaWeb 开发中使用 ServletOutStream 向浏览器响应数据(输出流输出数据),就是下载文件

文件下载jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><h3>高清影视下载</h3><a href="${pageContext.request.contextPath}/download.do?fileName=tiaoyins.mp4">调音师(生肉)</a><br><a href="${pageContext.request.contextPath}/download.do?fileName=调音师.mp4">调音师(熟肉)</a><br>
文件下载控制层代码
package com.ywq.springmvc.controller;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class DownloadController {/** 文件下载思路* * 1.程序根据接收的文件名称找到磁盘对应的文件,读取内存中来(文件不能太大),形成一个输入流** 2.通过Web开发中HttpServleResponse中获取输出流 ServletOutputStream将输入流响应给浏览器(下载)* 2.1 设置Http协议响应头,告诉浏览器(现在不是普通默认渲染html,而是响应附件内容(下载))* * */@RequestMapping("/download")public void download(String fileName,HttpServletResponse response,HttpServletRequest request) throws IOException {System.out.println("fileName:"+fileName);//1.程序根据接收的文件名称找到磁盘对应的文件,读取内存中来(文件不能太大),形成一个输入流InputStream inputStream = new FileInputStream("d:/linshi/"+fileName);//2.获取输出流ServletOutputStream outputStream = response.getOutputStream();/** 浏览器两个标准* * IE:微软* * W3C:万维网联盟(互联网标准组织)*  google浏览器*  firefox浏览器*     ...* *  国产浏览器都是基于谷歌和IE开源内核封装一个壳子* *     文件下载的时候*    W3C响应给浏览器的文件名称编码是ISO-8859-1编码*  需要再响应给浏览器之前将文件编码转换成ISO-8859-1编码* *  IE*         UTF-8* * *///获取请求头的User-AgentString userAgernt = request.getHeader("User-Agent");System.out.println(userAgernt);if (!userAgernt.contains("MSIE")) { //非IE浏览器//先将字符串转换成字节数组byte[] bytes = fileName.getBytes("UTF-8");//创建新的字符串:ISO-8859-1编码格式fileName = new String(bytes,"ISO-8859-1");}System.out.println("fileName:"+fileName);//2.1设置Http协议响应头,告诉浏览器(现在不是普通默认渲染html,而是响应附件内容(下载))response.setHeader("Content-Disposition", "attachment;filename="+fileName);/** commons-io-1.4.jar 工具包中有文件各种处理工具类* * IOUtile:IO输入输出流工具类* */IOUtils.copy(inputStream, outputStream);}}

通过SpringMVC实现文件/多文件上传与下载案例相关推荐

  1. jsp文件的简单上传与下载

    @[JSP文件的简单上传与下载] 一.前期工具准备:eclipse(这里推荐eclipse,myeclipse也行,自己找了半天也找不到为什么无法使用组件的问题),tomcat,还有jspsmartu ...

  2. 使用SpringMVC模拟文件上传与下载案例

    文件上传下载 SpringMVC封装了Tomcat的上传文件功能 MultipartResolver接口 MultipartResolver接口定义了文件上传过程中的相关操作,并对通用性操作进行了封装 ...

  3. asp 调用java文件上传_用asp实现文件浏览、上传、下载的程序

    可以放在服务器上,对服务器上的文件进行浏览.上传.下载,可下载文件源码. 把下所有代码入在一个文件里即可,文件的后缀要为asp. thedir = request("thedir" ...

  4. ftp文件/文件夹的上传和下载

    ftp文件的下载和删除:https://my.oschina.net/u/3700425/blog/1789570(注意是对文件操作) ftp文件夹的上传:https://blog.csdn.net/ ...

  5. JavaScript开发——文件夹的上传和下载

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  6. java实现文件夹的上传和下载

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  7. 【云速建站】文件专题(上传、下载、管理)

    [摘要] 本章介绍后台文件的管理及使用,包括上传和下载文件,使用外部存储保存大型文件(视频.超大文档等)并通过外链形式链接到网站中使用. 1      站点配额 以入门版站点为例,说一下站点的配额 1 ...

  8. xshell上传本地文件命令_XShell上传、下载本地文件到linux服务器

    Xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz. 首先你的Linux上需要安装安装lrzsz工具包,(如果没有安装请执行以下命令,安 ...

  9. JS开发——文件夹的上传和下载

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  10. java webservice下载文件,CXF webservice 上传以及下载文件

    [实例简介] CXF是支持对附件上传的协议MTOM. MTOM(SOAP Message Transmission Optimization Mechanism)SOAP 消息传输优化机制,可以在SO ...

最新文章

  1. 重磅直播|激光雷达在高精地图中的应用
  2. 我与 美国作家 21天精通C++ 作者 Rao的对话:
  3. SQL Server语句大全(增删改查数据、创建表、删除表、修改表)
  4. 11-散列1 电话聊天狂人 (25 分)
  5. Kali Linux 秘籍 第七章 权限提升
  6. mybatisplus service insert 空指针_c++ 图解层序遍历和逐层打印智能指针建造的二叉树...
  7. 如何在WEBLOGIC中设置日志输入
  8. shell自定义函数及参数调用解析
  9. 转:Python yield 使用浅析
  10. 138.复制带随机指针的链表
  11. RS编码-Python工具包使用
  12. 云端抢红包能从服务器看到我微信操作吗,微信抢红包暗藏规律 悄悄告诉你诀窍...
  13. 苹果iphone免越狱使用iTunes获取旧版本APP
  14. ps换证件照背景颜色
  15. 2022-2028全球与中国Microsoft Dynamics ERP咨询服务市场现状及未来发展趋势
  16. 【七夕节特刊】开源世界里的爱情保卫战
  17. Newton-Cotes 公式及代码
  18. 干货 | 读懂这篇文,玩游戏还会卡顿?
  19. 图像算法原理与实践——图像修复之 全变分模型
  20. 辨析 dB、dBm、dBw

热门文章

  1. 仿照锤子科技官网的banner 3d效果
  2. 读书笔记:Jack,杰克韦尔奇自传
  3. ImgBurn最方便小巧的刻录软件
  4. onBind,onRebind,onUnbind
  5. (三)shell中的运算与 if 语句——数据比较、文件判断、if条件语句用法等
  6. 仿华为电商商城,官网,华为超级新品日demo,大屏霸气且简洁
  7. Putty和WinSCP如何保持连接不断开
  8. unity 中使角色按键更灵敏。
  9. 红外线额温枪与红外线温度传感器的原理分析
  10. 计算机博士一年看多少篇文献,科学网—博士生真的需要一天看20篇文献吗? - 喻海良的博文...