一次文件下载记录

  一次不成熟的文件下载操作记录,希望能对需要的人有所帮助。

1.前端代码

  1. $("#downloadModel").click(function(){
  2.   var modelName = "设备信息导入模板.xls";
  3.   window.location.href = commenUrl +"/importAndExport/downloadModel?modelName="+modelName;
  4. });

2.控制层接收

  1. @RequestMapping(value = "/downloadModel", method = RequestMethod.GET)
  2. public void downloadModel(HttpServletRequest request,HttpServletResponse response,String modelName) {
  3. try {
  4. importAndExportService.downloadModel(modelName,request,response);
  5. } catch (Exception e) {
  6. e.printStackTrace();
  7. }
  8. }

3.实现下载功能

  1.   @SuppressWarnings("resource")
  2. @Override
  3. public void downloadBindModel(String modelName, HttpServletRequest request,
  4. HttpServletResponse response) throws Exception {
  5. //获取模板存放的路径
  6. String path=request.getSession().getServletContext().getRealPath("/")+"/excelTemplate/";
  7. InputStream is=new FileInputStream(new File(path + modelName));
  8. HSSFWorkbook hssfWorkbook=new HSSFWorkbook(is);
  9. //下载
  10. DownloadUtil dUtil=new DownloadUtil();
  11. ByteArrayOutputStream os=new ByteArrayOutputStream();
  12. hssfWorkbook.write(os);
  13. dUtil.download(os, response, modelName);
  14. os.flush();
  15. os.close();
  16. is.close();
  17. }

4.工具类代码

  1. public class DownloadUtil{
  2.  
  3. /**
  4. * @param filePath 要下载的文件路径
  5. * @param returnName 返回的文件名
  6. * @param response HttpServletResponse
  7. * @param delFlag 是否删除文件
  8. */
  9. protected void download(String filePath, String returnName, HttpServletResponse response, boolean delFlag){
  10. this.prototypeDownload(new File(filePath), returnName, response, delFlag);
  11. }
  12.  
  13. /**
  14. * @param file 要下载的文件
  15. * @param returnName 返回的文件名
  16. * @param response HttpServletResponse
  17. * @param delFlag 是否删除文件
  18. */
  19. protected void download(File file,String returnName,HttpServletResponse response,boolean delFlag){
  20. this.prototypeDownload(file, returnName, response, delFlag);
  21. }
  22.  
  23. /**
  24. * @param file 要下载的文件
  25. * @param returnName 返回的文件名
  26. * @param response HttpServletResponse
  27. * @param delFlag 是否删除文件
  28. */
  29. public void prototypeDownload(File file,String returnName,HttpServletResponse response,boolean delFlag){
  30. // 下载文件
  31. FileInputStream inputStream = null;
  32. ServletOutputStream outputStream = null;
  33. try {
  34. if(!file.exists()) {return;}
  35. response.reset();
  36. //设置响应类型 PDF文件为"application/pdf",WORD文件为:"application/msword", EXCEL文件为:"application/vnd.ms-excel"。
  37. response.setContentType("application/octet-stream;charset=utf-8");
  38. //设置响应的文件名称,并转换成中文编码
  39. //returnName = URLEncoder.encode(returnName,"UTF-8");
  40. returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1")); //保存的文件名,必须和页面编码一致,否则乱码
  41. //attachment作为附件下载;inline客户端机器有安装匹配程序,则直接打开;注意改变配置,清除缓存,否则可能不能看到效果
  42. response.addHeader("Content-Disposition", "attachment;filename="+returnName);
  43. //将文件读入响应流
  44. inputStream = new FileInputStream(file);
  45. outputStream = response.getOutputStream();
  46. int length = 1024;
  47. int readLength=0;
  48. byte buf[] = new byte[1024];
  49. readLength = inputStream.read(buf, 0, length);
  50. while (readLength != -1) {
  51. outputStream.write(buf, 0, readLength);
  52. readLength = inputStream.read(buf, 0, length);
  53. }
  54. } catch (Exception e) {
  55. e.printStackTrace();
  56. } finally {
  57. try {
  58. outputStream.flush();
  59. } catch (IOException e) {
  60. e.printStackTrace();
  61. }
  62. try {
  63. outputStream.close();
  64. } catch (IOException e) {
  65. e.printStackTrace();
  66. }
  67. try {
  68. inputStream.close();
  69. } catch (IOException e) {
  70. e.printStackTrace();
  71. }
  72. //删除原文件
  73. if(delFlag) {
  74. file.delete();
  75. }
  76. }
  77. }
  78.  
  79. /**
  80. * @param byteArrayOutputStream 将文件内容写入ByteArrayOutputStream
  81. * @param response 写入response
  82. * @param returnName 返回的文件名
  83. * @throws IOException
  84. */
  85. public void download(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response, String returnName) throws IOException {
  86. response.setContentType("application/octet-stream;charset=utf-8");
  87. returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1")); //保存的文件名,必须和页面编码一致,否则乱码
  88. response.addHeader("Content-Disposition", "attachment;filename=" + returnName);
  89. response.setContentLength(byteArrayOutputStream.size());
  90.  
  91. ServletOutputStream outputstream = response.getOutputStream(); //取得输出流
  92. byteArrayOutputStream.writeTo(outputstream); //写到输出流
  93. byteArrayOutputStream.close(); //关闭
  94. outputstream.flush(); //刷数据
  95. }
  96. }

java下载Excel模板(工具类)的更多相关文章

  1. java 下载Excel模板

    前端: JSP: <div id="insertBtn" class="MyCssBtn leftBtn" onclick="download( ...

  2. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  3. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  4. 下载数据到Excel,工具类

    使用反射将model数据下载到Excel中 package test.upload.utils; import java.lang.reflect.Method; import java.math.B ...

  5. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  6. excel读取 工具类

    package cn.yongche.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOExce ...

  7. Excel导入工具类兼容xls和xlsx

    package com.bj58.finance.platform.operation.provider.util; import org.apache.log4j.Logger; import or ...

  8. excel导出工具类

    package com.jianwu.util.excel; import com.google.common.collect.Lists;import com.jianwu.exception.Mo ...

  9. Excel导入工具类

    项目需要从Excel导入数据,然后插入到数据库对应表中.设计了一个导入工具类,导入数据和导入结果如下图示: poi jar版本采用的3.15 导入工具类实现如下: package com.alphaj ...

随机推荐

  1. [SF] Symfony 在 console 中结合 Workerman

    在web框架的console中,命令不再是直接指定入口文件,如以往 php test.php start,而是类似 php app/console do 的形式. workerman 对命令的解析是 ...

  2. 无分类编址(CIDR,Class Inter-Domain-Routing)

    CIDR全称是无分类域间路由选择,英文全称是Classless Inter-Domain Routing,大家多称之为无分类编址 CIDR的特点 (1)CIDR消除了传统的A类.B类和C类地址以及划分 ...

  3. velocity自定义指令不生效问题解决之旅

    一.背景现象 为了支持灵活的.可自定义的脱敏规则,工程拟采用velocity实现该目的,为此,自定义了: mask.substr两个指令,其中 mask实现 public class MaskDire ...

  4. xshell下mysql数据库只导出表结构不导出数据

    操作系统:linux: 使用软件:xshell.winscp 进入系统之后输入命令: mysqldump -u 用户名 - p 密码 -d 数据库名 > aaa.sql 注意字符间的空格. 之后 ...

  5. 转码器ffmpeg安装

    网络上很多帖子 但是基本上都是没有验证过复制粘贴的 以下是我自己装时流程和网络上的差不多但是中间不通的地方已经改正 centos7 1. 安装autoconf cd /App/srcwget http ...

  6. 针对Oracle数据库中SCOTT方案的多表查询的一个例子

    查询出每个员工的姓名.职位.月薪.所属部门名.月薪等级及其领导的姓名.职位.所属部门名.月薪等级.select e.ename 员工姓名,e.job 员工职位,e.sal 员工月薪,d.dname 员 ...

  7. java课程之团队开发冲刺1.1

    一.今日目标 1.完成课程助手的日期显示以及周数显示功能 2.将功能表改成侧面功能栏 3.将代码重新规范,尽量使得主函数简洁明了

  8. 简单搭建一个SpringBoot

    1.SpringBoot下载 https://start.spring.io/ 选择工程类型,编译语言,版本,工程名称,需要支持组件等:选择好了以后点击生成项目. 之后会下载一个压缩文件,解压之后导入 ...

  9. JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

    1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...

  10. 窗体背景和png

    窗体背景不要使用png格式图片,当窗体组件透明时,png会带来无穷的麻烦. 能不用png就不要用,截取图像也不要用Format32bppPArgb,特殊情况除外 Bitmap bkbmp = (Ima ...