Java批量导出word压缩后的zip文件案例

一、js代码,由于参数比较大所以利用form表单使用post导出

  function export_word(){
    var selectedRows = $("#dg").datagrid("getSelections");
    if (selectedRows.length==0) {
      showAlertWarning("请选择一条的信息...");
      return;
    }
    if (selectedRows.length > 1) {//批量导出压缩文件
      var id = "";
      for (var i = 0; i < selectedRows.length; i++) {
        var row = selectedRows[i];
        id += row.id+"name"+row.user_name+"@@";
      }
      layer.confirm('请选择要导出考核表的类型?', {
        btn: ['次数','具体条目'] //按钮
      }, function(index){
        postExportFile({"id":id,"type":0},"jee/AssessGradeSumC/exportWordsZip");
        layer.close(index);
      }, function(index){
        postExportFile({"id":id,"type":1},"jee/AssessGradeSumC/exportWordsZip");
      });
    } else {//导出单个
      layer.confirm('请选择要导出考核表的类型?', {
        btn: ['次数','具体条目'] //按钮
      }, function(index){
        window.location.href= "jee/AssessGradeSumC/exportWord?id="+selectedRows[0].id;
        layer.close(index);
      }, function(index){
        window.location.href= "jee/AssessGradeSumC/exportWordForSpecific?id="+selectedRows[0].id;
      });
    }
  }
 
  function postExportFile(params, url) { //params是post请求需要的参数,url是请求url地址
    var form = document.createElement("form");
    form.style.display = 'none';
    form.action = url;
    form.method = "post";
    document.body.appendChild(form);
 
    for(var key in params){
      var input = document.createElement("input");
      input.type = "hidden";
      input.name = key;
      input.value = params[key];
      form.appendChild(input);
    }
 
    form.submit();
    form.remove();
  }

二、controller代码(读完压缩文件后删除文件)

 /**
 *
 * @Description 考核成绩汇总考核表批量导出压缩
 * @Fcunction exportWordsZip
 * @param response
 * @return ReturnDatas
 *
 */
 @ResponseBody
 @SystemControllerLog(description = "考核成绩汇总考核表批量导出压缩")
 @RequestMapping(value = "exportWordsZip")
 public ReturnDatas exportWordsZip(HttpServletResponse response, String id, String type) {
 ReturnDatas returnDatas = ReturnDatas.getSuccessReturnDatas();
 try {
  response.setCharacterEncoding("UTF-8");
  response.setContentType("application/msexcle");
  response.setHeader("content-disposition", "attachment;filename=" + new String("考核成绩汇总表".getBytes("gb2312"), "ISO8859-1") + ".zip");
  String fileUrl = assessGradeSumService.exportWordsZip(id,type);
  OutputStream outputStream = response.getOutputStream();
  BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileUrl));;
  BufferedOutputStream bos = new BufferedOutputStream(outputStream);
  byte[] buff = new byte[2048];
  int bytesRead;
  while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
  bos.write(buff, 0, bytesRead);
  }
  bis.close();
  bos.close();
  outputStream.close();
  File zip = new File(fileUrl);
  if (zip.exists() && zip.isFile()) {
  zip.delete();
  }
  return returnDatas;
 } catch (Exception e) {
  e.printStackTrace();
  LogUtil.error("考核成绩汇总考核表批量导出压缩异常:" + e.getMessage(), e);
  returnDatas.setStatus(ReturnDatas.ERROR);
  returnDatas.setMessage("考核成绩汇总考核表批量导出压缩异常。");
 }
 return returnDatas;
 }

三、实现类代码,其中exportWord()和exportWordForSpecific()都是具体的word导出方法,生成zip压缩文件后删除word文件,ZipUtils是压缩文件工具类

/**
 *
 * @Fcunction exportWordsZip
 * @param id
 * @param type
 * @return String
 *
 */
 @Override
 public String exportWordsZip(String id, String type)throws Exception{
 String[] ids = id.split("@@");
 List fileList = new ArrayList<>();
 String url = "C:\\";
 for (int i = 0; i < ids.length; i++) {
  String id_name = ids[i];
  String id_value = id_name.split("name")[0];
  String name = id_name.split("name")[1];
  String docUrl = url + name + ".doc";
  fileList.add(new File(docUrl));
  XWPFDocument workbook = null;
  if ("0".equals(type)) {//按次
  workbook = exportWord(id_value);
  } else {//表单条目
  workbook = exportWordForSpecific(id_value);
  }
  FileOutputStream out = new FileOutputStream(docUrl);
  workbook.write(out);
 }
 String zipUrl = url+"考核成绩汇总表.zip";
 FileOutputStream fos = new FileOutputStream(new File(zipUrl));
 ZipUtils.toZip(fileList, fos);
 for (File out:fileList) {
  if (out.exists() && out.isFile()) {
  out.delete();
  }
 }
 return zipUrl;
 }

以上这篇Java批量导出word压缩后的zip文件案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

你可能感兴趣的:(Java批量导出word压缩后的zip文件案例)