SpringMvc的上传和下载
第一步:配置文件加入上传和下载的<bean>全部配置文件参考上上篇博文
<!-- 配置springMVC上传文件和下载文件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property><!-- 编码格式,与jsp格式一致 -->
<property name="maxUploadSize" value="52428880"></property><!-- 文件上传的最大限制 5mb -->
<property name="uploadTempDir" value="upload/temp"></property><!-- 上传文件的临时路径。文件上传后,会自动消失 -->
<property name="maxInMemorySize" value="4096"/>
</bean>
第二步:WEB-INF/lib下必加入:commons-fileupload.jar与commons-io-1.4.jar二个文件
第三步:表单属性为: enctype="multipart/form-data"
单文件上传的Controller中的方法
/**
* SpringMVC的文件上传
* 【1】上传的文件,会自动被绑定到MultipartFile的对象中。该对象的api
* (1)byte[] getBytes()获取文件数据
* (2)String getContentType()获取文件的MIME类型,如image/pjpeg,text/plain等
* (3)InputStream getInputStream()获取文件流
* (4)Sring getName()获取表单中文件组件的名称
* (5)String getOriginalFilename()获取上传文件的原名
* (6)long getSize()获取文件的字节大小,单位为byte
* (7)boolean isEmpty():是否有上传的文件
* (8)void transferTo(File dest) 可以使用给文件将上传文件保存到一个目标目录下
* @Title: uploadMyPictrue
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param file 为前台form表单中<input type="file" name="file"/>中的name
* @return
* @return String 返回类型
* @author 尚晓飞
* @date 2014-10-31 下午2:01:23
*/
@RequestMapping("/uploadMyPictrue")
public String uploadMyPictrue(HttpServletRequest request,@RequestParam("file") MultipartFile file){
System.out.println("StudentController.uploadMyPictrue()");
boolean flag=file.isEmpty();
if(!file.isEmpty()){
String mimesString=file.getContentType();//获取mime类型
System.out.println("MiME:"+mimesString);//MiME:image/jpeg
long size=file.getSize();
System.out.println("size:"+size);//size:89067
String nameString=file.getName();
System.out.println("组件名称:"+nameString);//组件名称:file
String realName=file.getOriginalFilename();
System.out.println("文件原名:"+realName);//文件原名:图片.jpg //获取项目跟目录
String path=request.getSession().getServletContext().getRealPath("");
//拼接上传文件的存放目录
path=path+"/uploadfile";
//为上传文件起一个新名字
Integer index=realName.lastIndexOf(".");
String suffix=realName.substring(index);
//获取当前时间戳
long fileNam=System.currentTimeMillis();
String fileNames=fileNam+suffix;//新的完整文件名
String pathString=path+"/"+fileNames;
File file2=new File(pathString); if(!file2.exists()){
file2.mkdir();//不存在就创建文件
}
//将文件上传到项目制定的目录下 try {
file.transferTo(file2);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{ } }else{
//上传文件为空
}
return "/page/success";
}
多文件上传的controller中的方法
/**
* 多文件上传
* @Title: moreUploadFile
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param request
* @param response
* @param errors
* @return
* @return String 返回类型
* @author 尚晓飞
* @date 2014-10-31 下午3:12:16
*/
@RequestMapping("/moreUploadFile")
public String moreUploadFile(HttpServletRequest request,HttpServletResponse response ){
//将请求作用域转换成上传作用域
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//获取封装了多个上传文件的map
Map<String, MultipartFile> fileMap=multipartRequest.getFileMap();
//获取项目根目录
String rootPath=request.getSession().getServletContext().getRealPath("");
//拼接上传目录
rootPath=rootPath+"\\uploadfile";
//逐个上传文件
Set<String> set=fileMap.keySet();
for(String name:set){
//该name的值,为前台form表单中<input type="file" name="xxx">中的xxx
MultipartFile file=fileMap.get(name);
String filename=file.getOriginalFilename();
String fileName=file.getName();//获取组件名 此处的值也是xxx的值
File file2=new File(rootPath+"\\"+filename);
if(file2.exists()){
file2.mkdir();
}
try {
file.transferTo(file2);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } return "/page/success";
}
文件下载的controller中的方法
/**
* 文件下载
* @Title: downLoadFile
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param request
* @param response
* @return void 返回类型
* @author 尚晓飞
* @date 2014-10-31 下午3:53:16
*/
@RequestMapping("/downLoadFile")
public void downLoadFile(String name,HttpServletRequest request,HttpServletResponse response){
//模拟从数据库查处文件的名
String fileName=name;
//拼接文件全路径
String rootPath=request.getSession().getServletContext().getRealPath("\\uploadfile")+"\\"+name;
//生成文件
File file=new File(rootPath);
long fileLength =file.length();//获取文件的大小 //输入流和输出流
BufferedInputStream bis = null;
BufferedOutputStream bos = null; try {
//设置下载的参数配置
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("UTF-8");
response.setContentType("application/x-msdownload;");
String files= new String(fileName.getBytes("utf-8"), "ISO8859-1");
response.setHeader("Content-disposition", "attachment; filename="+files);
response.setHeader("Content-Length", String.valueOf(fileLength)); //添加输入流
bis=new BufferedInputStream(new FileInputStream(file));
//添加输出流
bos=new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(bis!=null){
bis.close();
}
if(bos!=null){
bos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
SpringMvc的上传和下载的更多相关文章
- SpringMVC文件上传和下载
上传与下载 1文件上传 1.1加入jar包 文件上传需要依赖的jar包 1.2配置部件解析器 解析二进制流数据. <?xml version="1.0" encoding=& ...
- ExtJS+SpringMVC文件上传与下载
说到文件上传.下载功能,网络上大多介绍的是采用JSP.SpringMVC或者Struts等开源框架的功能,通过配置达到文件上传.下载的目地.可是最近项目要用到文件上传与下载的功能,因为本项目框架采用开 ...
- SpringMVC文件上传和下载的实现
SpringMVC通过MultipartResolver(多部件解析器)对象实现对文件上传的支持. MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipart ...
- SpringMVC实现上传和下载
摘要 有些下载的错误解决来 java.lang.IllegalStateException: getOutputStream() has already been called for this re ...
- SpringMVC文件上传与下载
一.关键步骤 ①引入核心JAR文件 SpringMVC实现文件上传,需要再添加两个jar包.一个是文件上传的jar包,一个是其所依赖的IO包.这两个jar包,均在Spring支持库的org.apach ...
- springMVC文件上传与下载(六)
1..文件上传 在springmvc.xml中配置文件上传解析器 <!-- 上传图片配置实现类,id必须为这个 --> <bean id="multipartResolve ...
- SpringMVC 文件上传及下载
首先需要导入jar包 创建一个jsp页面 package cn.happy.Controller; import java.io.File; import javax.servlet.http.Htt ...
- n文件的上传和下载,struts2和springmvc
首先,struts2的上传下载的配置 因为struts2是配置的上传的拦截器,很简单的步揍就可以上传, 首先是配置struts的action映射 <!-- 4. 修改上传文件的最大大小为30M ...
- 学习SpringMVC——国际化+上传+下载
每个星期一道菜,这个星期也不例外~~~ 一个软件,一个产品,都是一点点开发并完善起来的,功能越来越多,性能越来越强,用户体验越来越好……这每个指标的提高都需要切切实实的做点东西出来,好比,你的这个产品 ...
随机推荐
- Django 2.0 的路由如何实现正则表达式
在django2.0的路由系统中,摒弃了1.x中的url,而改用path.需要导入path. from django.urls import path,re_path 在1.x中,使用url()即可实 ...
- linux bash shell中,单引号、 双引号,反引号(``)的区别及各种括号的区别
一.单引号和双引号 首先,单引号和双引号,都是为了解决中间有空格的问题. 因为空格在Linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错.为了避免 ...
- 学习JVM
所谓虚拟机,就是一台虚拟的机器.它是一款软件,用来执行一系列虚拟计算机指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机,大名鼎鼎的Visual Box.VMware就属于系统虚拟机,他们完全是对物理计 ...
- hdu 1211 逆元
RSA Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- line-height:150% 和 line-height:1.5的区别
line-height:150% 是继承父元素的距离 line-height:1.5 是计算各子元素的距离 1.当line - height 为百分比时: body{ font-size:14px; ...
- Tree各种遍历实现
数据结构.算法及应用 张宪超主编 科学出版社 1. 数据结构的基本概念知识 数据结构的逻辑结构由数据节点和连接两个节点的边组成. 数据节点的数据类型:整型,实数型,布尔型,字符型,指针数据类型 结构的 ...
- C# 设计模式巩固 - 单例模式
前言 设计模式的文章很多,所以此文章只是为了巩固一下自己的基础,说的不详细请见谅. 介绍 - 单例模式 官方定义:确保一个类只有一个实例,并提供一个全局访问点. 通俗定义:就是一个类只有一个单个实例. ...
- Python之Fabric
[Fabric] Fabric是一个用Python开发的部署工具,最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署. 安装 wget https://bootstr ...
- PCA--主成份分析
主成份分析(Principle Component Analysis)主要用来对数据进行降维.对于高维数据,处理起来比较麻烦,而且高维数据可能含有相关的维度,数据存在冗余,PCA通过把高维数据向低维映 ...
- tornado源码分析系列一
先来看一个简单的示例: #!/usr/bin/env python #coding:utf8 import socket def run(): sock = socket.socket(socket. ...