java 导出excl 并压缩成压缩包通过GET下载

  • Post author:
  • Post category:java




java 导出excl


java 导出excl 并压缩成压缩包,前端通过windows.location.href下载

// 查询出来数据
List<RepayRecordExportDTO> repayRecordExportDTOS=repayRecordService.exportRepayRecord(params,request);
// 生成 Workbook 工具类使用反射获取类属性名字作为文档头
Workbook workbook = POIUtils.createExcel(repayRecordExportDTOS, RepayRecordExportDTO.class, "RepayRecord.xlsx", null);
        if(workbook == null) {
            return;
        }
        // 目前没啥用
        response.reset();
        // 时间戳用于文件命名
        String format=System.currentTimeMillis()+"";
        // 写出数据输出流到页面
        OutputStream output=null;
        BufferedOutputStream bufferedOutPut=null;
        FileOutputStream fileOutputStream=null;
        FileInputStream bis=null;
        FileOutputStream fileOutputStream1=null;
        ZipOutputStream zipOutputStream=null;
        // 压缩包存放路径 ,当前是在服务器上面,本地可以使用本地盘"D:\\test"
        String zipFilePath="/data/wwwroot/export/";
        // excl生成路径"
        String path="/data/wwwroot/export/";
        // zip名字
        String exclName="repayRecord.xlsx";
        // excl名称
        String zipName="repayRecord.zip";
        try {
            File file = new File(path);
            if (!file.exists()){
            // 可以做判断是否创建成功,我这里没做
                boolean mkdirs = file.mkdirs();
            }
            // 读取数据写入本地 -------
            File fileExcl = new File(path+exclName);
            fileOutputStream=new FileOutputStream(fileExcl);
            workbook.write(fileOutputStream);
            fileOutputStream.close();
            // -------写入完成
            
            // 开始压缩写入文件-------------------------   
            bis = new FileInputStream(fileExcl);
            ZipEntry zipEntry = new ZipEntry(fileExcl.getName());
            File file1 = new File(zipFilePath);
            if (!file1.exists()){
                boolean mkdirs = file1.mkdirs();
            }
            File fileZip = new File(zipFilePath+zipName);
            fileOutputStream1=new FileOutputStream(fileZip);
            zipOutputStream = new ZipOutputStream(fileOutputStream1);
            zipOutputStream.putNextEntry(zipEntry);
            byte[] data=new byte[1024];
            while ((bis.read(data)) != -1) {
                zipOutputStream.write(data);
            }
            bis.close();
            fileOutputStream1.flush();
            zipOutputStream.finish();
            fileOutputStream1.close();
            zipOutputStream.closeEntry();
            // -----------------------压缩完成
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (bufferedOutPut!=null){
                bufferedOutPut.close();
            }
            if (output!=null){
                output.close();
            }
            if (fileOutputStream!=null){
                fileOutputStream.close();
            }
            if (bis!=null){
                bis.close();
            }
            if (fileOutputStream1!=null){
                fileOutputStream1.close();
            }
            if (zipOutputStream!=null){
                zipOutputStream.close();
            }
        }
        ServletOutputStream sos = null;
        DataOutputStream dos = null;
        DataInputStream dis = null;
        File reportZip = null;
        try {
            // 指定下载的文件名--设置响应头
            response.reset();
            // Content-disposition这里不用这个下载的可能是没有后缀的文件,
            response.setHeader("Content-disposition", "attachment;FileName="+"RepayRecord_"+format+".zip");
            response.setHeader("Access-Control-Expose-Headers", "FileName");
            response.setHeader("FileName", "RepayRecord_"+format+".zip");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 0);
            response.setContentType("application/x-download");
            sos = response.getOutputStream();
            dos = new DataOutputStream(sos);
            File file=new File(zipFilePath+zipName);
            dis = new DataInputStream(new FileInputStream(file));
            byte[] b = new byte[2048];
            reportZip = new File(zipFilePath);
            while ((dis.read(b)) != -1) {
                dos.write(b);
            }
            dos.flush();
            dos.close();
            sos.flush();
            sos.close();
            dis.close();
            reportZip.delete();
        } catch (IOException e) {
            log.error("导出录失败error message:{}, error all:{}", e.getMessage(), e);
            e.printStackTrace();
        }

以上是个人开发中的代码,记下来以后方便查询,也可以为大家参考



版权声明:本文为qq_45381119原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。