第一步:配置文件加入上传和下载的<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的上传和下载的更多相关文章

  1. SpringMVC文件上传和下载

    上传与下载 1文件上传 1.1加入jar包 文件上传需要依赖的jar包 1.2配置部件解析器 解析二进制流数据. <?xml version="1.0" encoding=& ...

  2. ExtJS+SpringMVC文件上传与下载

    说到文件上传.下载功能,网络上大多介绍的是采用JSP.SpringMVC或者Struts等开源框架的功能,通过配置达到文件上传.下载的目地.可是最近项目要用到文件上传与下载的功能,因为本项目框架采用开 ...

  3. SpringMVC文件上传和下载的实现

    SpringMVC通过MultipartResolver(多部件解析器)对象实现对文件上传的支持. MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipart ...

  4. SpringMVC实现上传和下载

    摘要 有些下载的错误解决来 java.lang.IllegalStateException: getOutputStream() has already been called for this re ...

  5. SpringMVC文件上传与下载

    一.关键步骤 ①引入核心JAR文件 SpringMVC实现文件上传,需要再添加两个jar包.一个是文件上传的jar包,一个是其所依赖的IO包.这两个jar包,均在Spring支持库的org.apach ...

  6. springMVC文件上传与下载(六)

    1..文件上传 在springmvc.xml中配置文件上传解析器 <!-- 上传图片配置实现类,id必须为这个 --> <bean id="multipartResolve ...

  7. SpringMVC 文件上传及下载

    首先需要导入jar包 创建一个jsp页面 package cn.happy.Controller; import java.io.File; import javax.servlet.http.Htt ...

  8. n文件的上传和下载,struts2和springmvc

    首先,struts2的上传下载的配置 因为struts2是配置的上传的拦截器,很简单的步揍就可以上传, 首先是配置struts的action映射 <!-- 4. 修改上传文件的最大大小为30M ...

  9. 学习SpringMVC——国际化+上传+下载

    每个星期一道菜,这个星期也不例外~~~ 一个软件,一个产品,都是一点点开发并完善起来的,功能越来越多,性能越来越强,用户体验越来越好……这每个指标的提高都需要切切实实的做点东西出来,好比,你的这个产品 ...

随机推荐

  1. js删除数组中某一项或几项的几种方法

    1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 inde ...

  2. Kafka消息topic分区

      kafka是为分布式环境设计的,因此如果日志文件,其实也可以理解成消息数据库,放在同一个地方,那么必然会带来可用性的下降,一挂全挂,如果全量拷贝到所有的机器上,那么数据又存在过多的冗余,而且由于每 ...

  3. WPF:自定义ListBox的选择样式

    首先介绍一种简单地方法:就是通过自定义SystemColors类的参数来自定义WPF ListBox选择颜色的, SystemColors的HighlightBrushKey和HighlightTex ...

  4. 小米2S手机 - Charles无法安装证书 因为无法读取证书

    1.不要使用小米原装的浏览器安装证书 2.使用第三方浏览器安装,如我使用的是UC浏览器 3.使用第三方浏览器安装的证书格式是".pem"格式问卷 4.将这个文件放入小米的downl ...

  5. HDU-5695-拓扑排序+优先队列

    Gym Class Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  6. struts.xml路径修改后的web配置

    <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" ...

  7. Mac下新安装的MySQL无法登陆root用户解决方法

      一 设置MySQL命令行搜索路径 0.苹果->系统偏好设置->最下边点mysql 在弹出页面中 启动mysql服务 1.打开终端,输入: sudo vi ~/.bash_profile ...

  8. Using Oracle Database In-Memory with Oracle E-Business Suite

    Database In-Memory is one of a number of options that can be deployed to address Oracle E-Business S ...

  9. Java进阶3. 内存回收机制

    Java进阶3. 内存回收机制 20131029 前言: 学过C++的都知道,C++中内存需要程序员自己维护.说道这里,很多开发的同学就感觉很痛苦,当他转向Java的时候,就会说你看Java多好啊,程 ...

  10. c# 使用SqlBulkCopy 提高大数据插入数据库速度

    自己得一点总结: 1.BulkCopy采用的是插入方式,不是覆盖方式(原数据不动,在原数据的后面复制上dataTable中的内容) 2.自增的字段不用赋值 3.数据库字段名和dataTable列名可以 ...