文档章节

文件下载之返回文件流(Controller)

仲少
 仲少
发布于 2014/08/13 10:40
字数 255
阅读 89
收藏 1
 一、 
 
@Get("downloadTeacherTemplate")
 
 public Object downloadTeacherTemplate(Invocation inv) throws Exception {
 
  Map<String,Object> map=systemDictService.getSystemDictByCode("UPLOADIFY_DIR");
 
  String root=(String) map.get("value");//获得文件的根目录,如:http://10.0.50.130/SaveResourse/ 
 
  File file = new File(root+TEACHER_TEMPLET_FILEPATH);//TEACHER_TEMPLET_FILEPATH:文件的相对路径 
 
  InputStream inputStream=null;
 
  inputStream = new FileInputStream(file);
 
  String fileName="教师导入模板.xls";
 
  String agent = inv.getRequest().getHeader("USER-AGENT");
 
  String CONTENT_TYPE = "";
 
  CONTENT_TYPE = CONTENT_TYPE + "; charset=UTF-8";
 
  // 以流的形式下载文件。
  // 清空response
  inv.getResponse().reset();
 
  if (agent.contains("Firefox")) {
 
   fileName = new String(fileName.getBytes("utf-8"), "iso8859-1");
 
  } else {
 
   fileName = URLEncoder.encode(fileName, "utf-8");
 
   fileName = fileName.replace("+", "%20");
 
  }
 
  inv.getResponse().setHeader("Content-Disposition", "attachment;filename=\"" + fileName);
 
  inv.getResponse().addHeader("Content-Length", "" );
 
  inv.getResponse().setContentType(CONTENT_TYPE);
 
  inv.getResponse().setHeader("Content-Transfer-Encoding", "binary");
 
  inv.getResponse().setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
 
  inv.getResponse().setHeader("Pragma", "public");
 
  inputStream = new FileInputStream(file);
 
  return inputStream;
 }



 二、
 
 @Get

 @Post

 public Object getFileStream(Invocation inv) throws IOException{

  PropertiesUtil propertiesUtil = new PropertiesUtil();

  String url = inv.getRequest().getRequestURI();

  Map<String,Object> uploadifyMap=systemDictDao.getSystemDictByClassCode("UPLOADIFY_URL");  //获得文件上传永久路径

  String root = String.valueOf(uploadifyMap.get("value"));

  String suffix = url.replaceAll("
http://www.yunedu.cc/SaveResourse/
", "");

  String path = root + suffix;

  File file = new File(path);

  String fileName = file.getName();

  String ext = fileName.substring(fileName.lastIndexOf(".")+1);

  inv.getResponse().reset();

  inv.getResponse().setHeader("Content-Disposition", "attachment;filename=\"" + fileName);

  inv.getResponse().addHeader("Content-Length", ""+file.length());

  inv.getResponse().setContentType(propertiesUtil.getProperty(ext));

  inv.getResponse().setHeader("Content-Transfer-Encoding", "binary");

  inv.getResponse().setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");

  inv.getResponse().setHeader("Pragma", "public");

  FileInputStream imputStream = new FileInputStream(file);

  return imputStream;

 }

© 著作权归作者所有

共有 人打赏支持
仲少
粉丝 1
博文 16
码字总数 6191
作品 0
厦门
SpringMVC,EasyUI,MyBatis通用导出EXCEL方案求解

本人想实现,通用的基于SpringMVC,EasyUI,MyBatis的EXCEL方案。SpringMVC,REST风格URL,MyBatis使用mapper方式,使用Spring注解。 所有EasyUI datagrid查询对应的都是@ResponseBody方式返回...

小伙伴新手上路
2013/09/27
3.3K
2
羊望/carson-web-mvc

Carson-Web-MVC Carson-Web-MVC是基于Spring MVC的轻量级扩展,借鉴了ASP.Net MVC及JFinal框架的思路,提供了一种更简洁的MVC路由模式。 该框架依赖于spring-webmvc和jackson。 URL路由无配置...

羊望
2017/02/05
0
0
ASP.netMVC文件下载的几种方法

第一种:最简单的超链接方法,标签的href直接指向目标文件地址,这样容易暴露地址造成盗链,这里就不说了 第二种:后台下载 在后台下载中又可以细分为几种下载方式 首先,在前台,我们需要一...

dcrenl
10/11
0
0
SpringMVC之文件上传和下载

SpringMVC实现文件的上传和下载相对于JavaWeb阶段我们使用过servlet实现文件上传和下载操作;而SpringMVC实现了对上传操作的直接支持,提供了解析器。提供了一些对文件操作的方法,使得文件上...

TyCoding
09/01
0
0
Spring Boot + thymeleaf 实现文件上传下载

最近同事问我有没有有关于技术的电子书,我打开电脑上的小书库,但是邮件发给他太大了,公司又禁止用文件夹共享,于是花半天时间写了个小的文件上传程序,部署在自己的Linux机器上。 提供功能...

卡巴拉的树
2017/12/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker Compose 原理

Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 dock...

Java干货分享
21分钟前
0
0
解决过滤器中设置cookie无效的问题

解决过滤器中设置cookie无效的问题 代码现场 filterChain.doFilter(sessionSyncRequestWrapper, response);Cookie emailCook = WebServletUtil.getSelectedCookie(request.getCookies(), ......

黄威
32分钟前
0
0
Hbase Schema 设计注意事项及最佳实践总结

一个列族的所有列在硬盘上存放在一起,使用这个特性可以把不同访问模式的列放在不同列族,以便隔离它们。这也是HBase被称为面向列族的存储(column-family-oriented store)的原因。 1、RowKe...

PeakFang-BOK
44分钟前
1
0
t-io给群组成员内置排序

1、实现比较器Comparator<ChannelContext> package xxx;import java.util.Comparator;import java.util.Objects;import java.util.Set;import java.util.TreeSet;import or......

talent-tan
48分钟前
2
0
px、em、rem 区别及作用

原文 起因: 一开始是为了解决页面放大时,字体不跟着放大的 bug。现在多用用于统一规范。 概念: 任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em...

lemos
57分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部