文件的上传下载一般在项目中还是非常实用的,此处专门整理一下文件的下载,至于文件的上传实现将在后续中补上。文件的下载多用于模板文件的下载,这在项目中用的还是挺多的。今天用到了就整理出来了,以供搬运工们借鉴并使用,已验证无误。

(1)     前台实现

前台实现非常简单,不像文件上传那样复杂,只要给出一个超链接,链接到后台处理的方法,并且需要将文件名传入Controller。

(2)     后台处理

后台的Controller就主要处理这样几个问题:

①根据文件名,找到模板文件

②设置响应的形式、文件头、编码

③通过流的形式读取模板文件内容并将之写入输出流

④关闭输入输出流

(3)     下面我们根据前台后台的实现思路来具体看一下实现代码:

①前台:

<a href="${base}/downloadTemplate?fileName=abilityTemplate.xlsx">模板下载</a>

②后台:

  @RequestMapping(value = "/downloadTemplate",method = RequestMethod.GET)

public String downloadAbilityTemplate(String fileName,HttpServletRequest request,HttpServletResponse response){

response.setCharacterEncoding("utf-8");//设置编码

response.setContentType("multipart/form-data");//设置类型

response.setHeader("Content-Disposition", "attachment;fileName="+ fileName);                                       //设置响应头

try {

String filePath = Config.getValue("path");

//获取配置文件中模板文件所在目录

String path = request.getSession().getServletContext().getRealPath("/")+filePath;

//获取模板文件的相对目录

InputStream inputStream = new FileInputStream(new File(path+ File.separator + fileName));

OutputStream os = response.getOutputStream();

byte[] b = new byte[2048];

int length;

while ((length = inputStream.read(b)) > 0) {

os.write(b, 0, length);

}//边读模板文件边写入输出流

os.close();

inputStream.close();//关流

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;                //注意此时return null

}

(4)     注意点:

①返回模型层应该是return null,否则出现如下错误:

java+getOutputStream() has already been called for this response

②模板文件的位置可以根据需要存放,只要在后台能获取到此文件的全路径就行

放在class目录下获取是:

//获取classes所在路径

String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();

//获取WebRoot目录:

String path = request.getSession().getServletContext().getRealPath("/")

行走在设计师的路上!

最新文章

  1. 【Java大系】Java快速教程
  2. js实现多张图片每隔一秒换一张图片
  3. storm单机环境部署
  4. 【转】十分钟搞定pandas
  5. Python单元测试框架之pytest -- 生成测试报告
  6. static、final、static final 用法
  7. 小菜鸟 学MQ(二)
  8. Unity ScriptableObject的使用
  9. SQL性能优化之一
  10. JAVA之Exchanger
  11. Niagara技术文档汇总
  12. 《Hadoop》对于高级编程Hadoop实现构建企业级安全解决方案
  13. VB webbrowser 控件的应用(跨域 内嵌网页元素的访问)
  14. ActiveMQ结合WebScoket应用例子以及介绍
  15. ZooKeeper 状态机
  16. 邓_ Php&#183;笔记本[照片]
  17. 【洛谷P1402】酒店之王
  18. SpringBoot使用Filter过滤器处理是否登录的过滤时,用response.sendRedirect()转发报错
  19. java操作elasticsearch实现聚合查询
  20. JMeter Exception: java.net.BindException: Address already in use: connect(转)

热门文章

  1. 看鸟哥的Linux私房菜的一些命令自我总结(三)
  2. Codeforces - 1114B - Yet Another Array Partitioning Task - 构造 - 排序
  3. pojcoin【未完待续】
  4. hdoj1827
  5. poj2239 poj1274【二分匹配】
  6. python 类型转换总结
  7. NOIp2005 过河【dp+离散化】By cellur925
  8. const 和 constexpr
  9. python之处理json
  10. Dima and Magic Guitar CodeForces - 366E