使用springmvc进行文件的上传和下载
文件的上传
SpringMVC支持文件上传组件,commons-fileupload,commons-fileupload依赖commons-io组件
配置步骤说明
第一步:导入包 commons-fileupload组件
第二步:配置springmvc支持上传组件
1.启动springmvc注解支持
2.配置上传解释器(对象名必须是固定的)
第三步:构建一个上传表单
第四步:在业务控制器编写保存上传文件的逻辑
配置步骤:
1.导入包

2.配置文件的配置
<!--启动注解的默认配置-->
<mvc:annotation-driven /> <!-- 文件上传解释器 -->
<!-- 名字不能写错,一定是multipartResolver -->
<bean name="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 默认内存的大小 单位为b-->
<!-- <property name="maxInMemorySize" value="512000000" ></property> -->
<!-- 默认文件最大大小,b-->
<property name="maxUploadSize" value="20000000"></property> </bean>
此步骤注意事项:
1.为什么需要一个注解的支持?因为需要<mvc:annotation-driven />来支持扩展注解,注解的支持类似系统补丁的方式打到框架里面
如:对作用域request、session,放开静态资源的访问、上传组件、json 等都需要注解的支持<mvc:annotation-driven />
2.文件上传解释器的对象名必须是固定的multipartResolver,因为multipartResolver是一个固定加载的属性
3.上传表单
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body> 文件上传<br/>
<!-- 要求
1.method必须是POST
2.内容类型:multipart/form-data
-->
<form action="${pageContext.request.contextPath }/upload.mvc" method="post" enctype="multipart/form-data">
<input name="file" type="file"> <input type="submit" value="上传">
</form> </body>
</html>
此步骤注意事项:
1.method必须是post方式提交
2.内容类型:multipart/form-data
4.后台代码:
package cn.gzsxt.controller; import java.io.File;
import java.io.IOException; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile; @Controller
public class FileUploadController { /**
* 注意接收上传文件的接口
* SpringMVC的业务控制器执行方法,除了已经有内置对象的接口,可以声明接口。
* 如果内内置对象声明接口会报错。
* 原因,只有在执行方法上面放一个类或者接口,SpringMVC会先去容器查找是否否兼容类型的对象,
* 如果有,就赋予给它,如果没有就会重新创建一个新的对象,如果声明了接口,容器原来没有,新创建的时候就会报错。
*
* SpringMVC常见的内置对象有
* 1.Model
* 2.ModelMap
* 3.HttpServletRequest
* 4.HttpServletResponse
* 5.HttpSession
* 6.MultipartFile
* @return
*/
@RequestMapping(value="upload")
public String upload(MultipartFile file){
System.out.println("-文件上传-");
//获得文件的原名
System.out.println(file.getOriginalFilename());
//创建一个文件
File destfile=new File("D:/dir/"+file.getOriginalFilename());
//将读取到的上传文件写入到destfile
try {
file.transferTo(destfile);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "/upload.jsp";
} }
如果需要同时上传多个文件,则还需要判断上传的文件是否为空!!!
文件的下载
1.读取本地的文件
2.将读取的文件显示到页面上
3.页面点击下载,下载文件
代码:
1.创建一个文件列表
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
/*
将路径的参数编码.发送到后台方法在解码
*/
function download(val){
//将参数路径编码,Base64
var filename=encodeURI(val);
//escape防止浏览器转义导致路径编码无法解释
var path="${pageContext.request.contextPath }/download.mvc?fname="+escape(filename);
//跳转到下载的路径
window.location.href=path;
}
</script>
</head>
<body>
文件列表
<table border="1">
<tr>
<td>文件名</td>
<td>下载</td>
</tr>
<c:forEach var="fileName" items="${fileNames }">
<tr>
<td>${fileName}</td>
<td><a href="javascript:download('${fileName}')">下载</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
后台代码:
import java.io.File;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.Arrays; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class DownloadController {
/**
* 文件下载首先要有一个下载列表
* @return
*/
@RequestMapping(value="file-list")
public String listFile(HttpServletRequest request){
//1.读取文件夹 d:\dir
File dir =new File("d:/dir");
//2.获得文件夹里面文件名
String[] fileNames = dir.list();
System.out.println(Arrays.toString(fileNames));
//3.将文件名放在request
request.setAttribute("fileNames", fileNames);
return "/file-list.jsp";
} /**
* 文件下载
* 所谓的文件下载就是将文件写入到HttpServletResponse里面
*/
@RequestMapping(value="download")
public void download(String fname,HttpServletResponse response){
try {
//解码
fname=URLDecoder.decode(fname, "UTF-8");
System.out.println(fname+"-----");
//1.通过文件名获得文件
File file=new File("d:/dir/"+fname);
//将文件变成流,写入到HttpServletResponse的输出流里面
//使用commons-io-2.2.jar的文件处理类实现,将文件转成一个byte[]字节流
byte[] array=null; array = FileUtils.readFileToByteArray(file);
//在response输出之前,设置输出的格式
//默认不支持中文,new String(fname.getBytes(),"ISO-8859-1"),转义中文编码
response.addHeader("Content-Disposition", "attachment;filename="+new String(fname.getBytes(),"ISO-8859-1"));
//将文件写入到response的输出流
response.getOutputStream().write(array);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
使用springmvc进行文件的上传和下载的更多相关文章
- SpringMVC 实现文件的上传与下载
一 配置SpringMVC ,并导入与文件上传下载有关的jar包(在此不再赘述) 二 新建 相应 jsp 和controller FileUpAndDown.jsp <%@ page lang ...
- SpringMVC下文件的上传与下载以及文件列表的显示
1.配置好SpringMVC环境-----SpringMVC的HelloWorld快速入门! 导入jar包:commons-fileupload-1.3.1.jar和commons-io-2.4.ja ...
- springMVC实现文件的上传和下载
文件的下载功能 @RequestMapping("/testDown")public ResponseEntity<byte[]> testResponseEntity ...
- SpringMVC框架——文件的上传与下载
使用SpringMVC框架做个小练习,需求: 1.单个图片上传并显示到页面中: 2.多个图片上传并显示到页面中: 3.上传文件后下载文件: 1.pom.xml中添加依赖 <!-- 文件上传 -- ...
- Spring MVC 实现文件的上传和下载
前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...
- 在SpringMVC框架下实现文件的 上传和 下载
在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...
- SpringMVC中文件的上传(上传到服务器)和下载问题(一)
一.今天我们所说的是基于SpringMVC的关于文件的上传和下载的问题的解决.(这里所说的上传和下载都是上传到服务器与从服务器上下载文件).这里的文件包括我们常用的各种文件.如:文本文件(.txt), ...
- SocketIo+SpringMvc实现文件的上传下载
SocketIo+SpringMvc实现文件的上传下载 socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址 ...
- 文件的上传和下载--SpringMVC
文件的上传和下载是项目开发中最常用的功能,例如图片的上传和下载.邮件附件的上传和下载等. 接下来,将对Spring MVC环境中文件的上传和下载进行详细的讲解. 一.文件上传 多数文件上传都是通过表单 ...
随机推荐
- hdu5592 倒序求排列+权值线段树
这种题为什么要用到主席树啊..8说了,直接上代码 /* 1-n的排列,给定所有前缀的逆序对数量,要求恢复排列 首先能确定最后一个数是什么,然后倒序确定即可 开线段树找空位:如果Ai-Ai-1=k,说明 ...
- Android 杂谈---ListView 之BaseAdapter
前言 几种适配器里面相对来说比较简单的一种适配器,在使用时需要实现几个方法,并且也需要对convertView进行优化 此篇文章以使用listView与BaseAdapter来实现表格样式的布局举例( ...
- 装饰器模式&&ES7 Decorator 装饰器
装饰器模式(Decorator Pattern)允许向一个现有的对象动态添加新的功能,同时又不改变其结构.相比JavaScript中通过鸡肋的继承来给对象增加功能来说,装饰器模式相比生成子类更为灵活. ...
- Gradle: Download 下载慢的解决办法
应该是gradle被墙了,在网上查得:使用阿里云的国内镜像仓库地址,就可以快速的下载需要的文件: 修改项目根目录下的文件 build.gradle : buildscript { repositori ...
- python面试题整理
1.谈谈你对csrf的理解和django中CSRF防护机制. 什么是 CSRF CSRF, Cross Site Request Forgery, 跨站点伪造请求.举例来讲,某个恶意的网站上有一个指向 ...
- asp+SqlServer2008开发【第三集:win2winSSH远程连接—像连接Linux一样操作】
1,参考:https://blog.csdn.net/flyingshuai/article/details/72897692 和https://blog.csdn.net/nijiayy/artic ...
- Vs2017 typescript 开发小问题
最近想写点ts的东西,以前用vs2015很方便,直接创建一个ts app项目就折腾了. Vs2017打开,居然发现这个项目模板不见了. 于是研究了一下,由于原来的ts app项目就是一个asp.n ...
- 【JAVA基础】一:聊聊笔试常见到的 “==、equal” 比较是否相等的内在差别
开始本文之前,先让我们记住一个口诀(这个口诀只针对基础的类比如String.Integer等,如果是自定义的类,需要看equal的具体实现): equal比较其值,== 比较地址 这两天在走查代码的时 ...
- Sting、StringBuffer、StringBuilder
(1)String是字符串常量,一旦创建之后不可更改:StringBuffer和StringBuilder是字符串变量,可以更改.String的不可变,所以适合作为Map的键. (2)StringBu ...
- php替换字符串函数strtr()和str_repalce()区别
php中替换函数主要有strtr(),str_repalce()这两个函数,但你们都知道他们这两个函数的区别和用法吗? 先来看看这个php字符串替换函数 strtr()的两种用法: strtr(str ...