zoukankan      html  css  js  c++  java
  • poi下载excel模板

    /**
         * 下载模板
         * @param tplName
         * @param returnName
         * @param response
         * @param request
         * @throws Exception
         */
        @RequestMapping(value = "/downloadTpl")
        public void downloadTpl(String tplName,String returnName, HttpServletResponse response,
                                  HttpServletRequest request) throws Exception {
            try {
                //获取模板存放的路径
                String path=request.getSession().getServletContext().getRealPath("/")+"/WEB-INF/ExcelTemplate/";
                InputStream is=new FileInputStream(new File(path + tplName));
                HSSFWorkbook wb=new HSSFWorkbook(is);
                //下载
                DownloadUtil dUtil=new DownloadUtil();
                ByteArrayOutputStream os=new ByteArrayOutputStream();
                wb.write(os);
                dUtil.download(os, response, returnName);
                os.flush();
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
                throw new Exception();
            }
    
        }

    (1)其中,需要配置的pom.xml文件

    (2)excel文件

    (3)downloadutil工具类文件

    package com.test.util;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class DownloadUtil {
    
      /**
       * @param filePath 要下载的文件路径
       * @param returnName 返回的文件名
       * @param response HttpServletResponse
       * @param delFlag 是否删除文件
       */
      protected void download(String filePath, String returnName, HttpServletResponse response, boolean delFlag){
        this.prototypeDownload(new File(filePath), returnName, response, delFlag);
      }
    
    
      /**
       * @param file 要下载的文件
       * @param returnName 返回的文件名
       * @param response HttpServletResponse
       * @param delFlag 是否删除文件
       */
      protected void download(File file,String returnName,HttpServletResponse response,boolean delFlag){
        this.prototypeDownload(file, returnName, response, delFlag);
      }
    
      /**
       * @param file 要下载的文件
       * @param returnName 返回的文件名
       * @param response HttpServletResponse
       * @param delFlag 是否删除文件
       */
      public void prototypeDownload(File file,String returnName,HttpServletResponse response,boolean delFlag){
        // 下载文件
        FileInputStream inputStream = null;
        ServletOutputStream outputStream = null;
        try {
          if(!file.exists()) {return;}
          response.reset();
          //设置响应类型    PDF文件为"application/pdf",WORD文件为:"application/msword", EXCEL文件为:"application/vnd.ms-excel"。
          response.setContentType("application/octet-stream;charset=utf-8");
    
          //设置响应的文件名称,并转换成中文编码
          //returnName = URLEncoder.encode(returnName,"UTF-8");
          returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1"));    //保存的文件名,必须和页面编码一致,否则乱码
    
          //attachment作为附件下载;inline客户端机器有安装匹配程序,则直接打开;注意改变配置,清除缓存,否则可能不能看到效果
          response.addHeader("Content-Disposition",   "attachment;filename="+returnName);
    
          //将文件读入响应流
          inputStream = new FileInputStream(file);
          outputStream = response.getOutputStream();
          int length = 1024;
          int readLength=0;
          byte buf[] = new byte[1024];
          readLength = inputStream.read(buf, 0, length);
          while (readLength != -1) {
            outputStream.write(buf, 0, readLength);
            readLength = inputStream.read(buf, 0, length);
          }
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
          try {
            outputStream.flush();
          } catch (IOException e) {
            e.printStackTrace();
          }
          try {
            outputStream.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
          try {
            inputStream.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
          //删除原文件
    
          if(delFlag) {
            file.delete();
          }
        }
      }
    
      /**
       * by tony 2013-10-17
       * @param byteArrayOutputStream 将文件内容写入ByteArrayOutputStream
       * @param response HttpServletResponse    写入response
       * @param returnName 返回的文件名
       */
      public void download(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response, String returnName) throws IOException {
        response.setContentType("application/octet-stream;charset=utf-8");
        returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1"));            //保存的文件名,必须和页面编码一致,否则乱码
        response.addHeader("Content-Disposition",   "attachment;filename=" + returnName);
        response.setContentLength(byteArrayOutputStream.size());
    
        ServletOutputStream outputstream = response.getOutputStream();    //取得输出流
        byteArrayOutputStream.writeTo(outputstream);                    //写到输出流
        byteArrayOutputStream.close();                                    //关闭
        outputstream.flush();                                            //刷数据
      }
    }

    (4)jsp页面的调用代码

     //模板下载
          $("#downloadFlowOrderTpl").click(function(){
              var tplName = "测试资金流水单模板.xls";
              var returnName =  "资金流水单模板.xls";
              window.location.href = "${pageContext.request.contextPath}/uploadCtrl/downloadTpl?tplName="+tplName+"&returnName="+returnName;
          });
  • 相关阅读:
    24点游戏算法
    汉诺塔算法
    台阶算法
    质因数分解算法
    全排列递归算法
    DFS 深度优先搜索例题
    容器
    数细胞
    C++栈和队列
    C++STL中vector容器 begin()与end()函数、front()与back()的用法
  • 原文地址:https://www.cnblogs.com/yangyuke1994/p/10225026.html
Copyright © 2011-2022 走看看