使用EasyPoi实现文件批量下载,导出与压缩

添加依赖

下面是 依赖代码片

       <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.0.3</version>
        </dependency>

核心业务

  1. 前端页面
    批量下载文件
  2. 创建文件模板
    模板附件
    后台模板存放路径
    第一张图红色标记的地方,是我们需要后台填充的数据,第二张图是模板在项目里的存放路径,后面需要读取该路径。excel的语法具体可以参考利用模板语法快速生成 Excel 报表
  3. 导出至指定路径,并打包压缩的后台实现
public void createProjectMaterialVisible(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException, UnsupportedEncodingException {
		//创建存放模板数据的对象
        Map<String, Object> dataMap =new HashMap<>();
		//创建一个模板对象
        TemplateExportParams tempParams=null;
        String projectName = String.valueOf(params.get("projectName"));
        String projectNumber = String.valueOf(params.get("projectNumber"));
		//将数据存放到dataMap中,这里的key(projectName,projectNumber)要与模板中定义的名称保持一致,后面有更多的key也是一样
        dataMap.put("projectName", projectName);
        dataMap.put("projectNumber", projectNumber);
		//前端选择的文件
        String fileType = (String) params.get("fileType");
        String fileUrl=null;
		//定义一个文件导出存放的路径
        String excelPath="D:/"+projectName+"["+projectNumber+"]"+"项目资料";
        if (StringUtils.isNotBlank(fileType)) {
            String[] fileTypeArray = String.valueOf((String) params.get("fileType")).split(",");
            if (fileTypeArray.length > 0) {
                for(String x : fileTypeArray){
                    List<FileDownloadHistoryExcel> dataList = Lists.newArrayList();
                    if(x.equals("1")){
					    //找到模板的存放路径
                        tempParams= new TemplateExportParams("TemplateFiles/招标文件领取表.xls");
						//这边是业务需要的逻辑
                        String url = interfaceUtil.getBaseUrl() + "/sys/fileDownloadHistory/getListByProjectId";
                        JSONObject res = HttpsUtils.doGet(url, params);
                        System.out.print("----------------------------" + res);
                        if (null != res) {
                            Map<String, String> resMap = CommenUtil.jsonStrToMap(res.toJSONString());
                            JSONArray list = JSONArray.parseArray(resMap.get("data"));
                            if (list.size() > 0) {
								//创建需要下载的excel对象
                                FileDownloadHistoryExcel excel;
                                for (int i = 0; i < list.size(); i++) {
                                    excel = new FileDownloadHistoryExcel();
									//将数据放入excel中
                                    excel.setProjectName(String.valueOf(list.getJSONObject(i).get("projectName")));
                                    excel.setProjectNumber(String.valueOf(list.getJSONObject(i).get("projectNumber")));
                                    excel.setSupplierName(String.valueOf(list.getJSONObject(i).get("supplierName")));
                                    excel.setProjectContacts(String.valueOf(list.getJSONObject(i).get("projectContacts")));
                                    excel.setContactInformation(String.valueOf(list.getJSONObject(i).get("contactInformation")));
                                    excel.setMailbox(String.valueOf(list.getJSONObject(i).get("mailbox")));
                                    excel.setDownloadTime(null == list.getJSONObject(i).get("downloadTime") ? null : String.valueOf(list.getJSONObject(i).get("downloadTime")));
                                    dataList.add(excel);
                                }
                            }
                        }
						//将excel放入定义好的对象中
                        dataMap.put("dataList", dataList);
                    }else if(x.equals("2")){
                        tempParams=new TemplateExportParams("TemplateFiles/投标文件送达登记表.xls");
                    }else if(x.equals("3")){
                        tempParams=new TemplateExportParams("TemplateFiles/现场承诺书.docx");
                    }else if(x.equals("4")){
                        tempParams=new TemplateExportParams("TemplateFiles/报价确认表.xls");
                    }
                    if(x.equals("2") || x.equals("4")){
                        String url = interfaceUtil.getBaseUrl() + "/sys/HistoricalBidding/list";
                        JSONObject res = HttpsUtils.doGet(url, params);
                        JSONArray supplierArr = res.getJSONArray("data");
                        FileDownloadHistoryExcel excel;
                        if(supplierArr.size()>0){
                            for (int j = 0; j < supplierArr.size(); j++) {
                                excel = new FileDownloadHistoryExcel();
                                String supplierName=supplierArr.getJSONObject(j).getString("supplierName");
                                excel.setSupplierName(supplierName);
                                dataList.add(excel);
                            }
                            dataMap.put("dataList", dataList);
                        }
                    }
                    if(x.equals("3")){
					   //这边是word的导出方法,也很简单,主要是定义一个XWPFDocument对象,再调用WordExportUtil.exportWord07()方法
                        XWPFDocument doc = null;
                        try {
                            doc = WordExportUtil.exportWord07("TemplateFiles/现场承诺书.docx", dataMap);
                            FileOutputStream fos = new FileOutputStream(excelPath+"/现场承诺书.docx");
                            doc.write(fos);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }else{
					   //这里是将数据导入至excel模板中
                        Workbook workbook = ExcelExportUtil.exportExcel(tempParams, dataMap);
                        File savefile = new File(excelPath+"/");
                        if (!savefile.exists()) {
                            savefile.mkdirs();
                        }
						//这是要保证你的文件路径的正确性,否则就会报错找不到该系统路径
                        if(x.equals("1")){
                            fileUrl=excelPath+"/招标文件领取表.xls";
                        }else if(x.equals("2")){
                            fileUrl=excelPath+"/投标文件送达登记表.xls";
                        }else if(x.equals("4")){
                            fileUrl=excelPath+"/报价确认表.xls";
                        }
                        FileOutputStream fos = new FileOutputStream(fileUrl);
                        try {
                            workbook.write(fos);
                            fos.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
            //压缩4个附件
            ZipUtil.zip(excelPath);
            String zipFileName = excelPath+".zip";
            File zipFile = new File(zipFileName);
            BufferedInputStream bins=new BufferedInputStream(new FileInputStream(zipFile));
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-Type", "application/x-download");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(zipFile.getName(), "UTF-8"));
            ServletOutputStream out1 = null;
            try {
				//这边直接压缩并且在浏览器下载
                out1 = response.getOutputStream();
                int bytesRead = 0;
                byte[] buffer = new byte[8192];
                while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
                    out1.write(buffer, 0, bytesRead);
                }
                out1.flush();
                bins.close();
                out1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
  1. 文件直接在浏览器端下载实现
  public void exportPromise(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {
       ModelMap modelMap = new ModelMap();
       Map<String, Object> dataMap = Maps.newHashMap();
   	   //给模板填充内容,key与模板中定义的名称一样
       String projectName = String.valueOf(params.get("projectName"));
       String projectNumber = String.valueOf(params.get("projectNumber"));
       dataMap.put("projectName", projectName);
       dataMap.put("projectNumber", projectNumber);
       modelMap.put(TemplateWordConstants.FILE_NAME,"自定义的文件名");
   	   //找到自己的模板路径
       modelMap.put(TemplateWordConstants.URL,"TemplateFiles/promiseReport.docx");
       modelMap.put(TemplateWordConstants.MAP_DATA, dataMap);
       PoiBaseView view = new EasypoiTemplateWordView();
       try {
   	       //一行代码直接下载
           view.render(modelMap, request, response);
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
   直接下载就超级简单,这边给的简单的模板,如果模板里是集合的话,就参照上面的excel的    数据添加部分。
导出excel和word的核心代码大致就是这些了,有问题欢迎提出来,一起探讨学习。喜欢的可以点赞收藏,哈哈哈,这是我继续更博的动力呀

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