IntelliJ IDEA 工具grails实现多个文件压缩下载

4 篇文章 0 订阅
2 篇文章 0 订阅

1.在前台页面中使用checkbox多选复选框,对文件进行选择
2.前台数据传到后台,前台代码,前台选中多个文件,对文件的id进行一次性传输

 $("#exportSelected").click(function(){
               var checkbox = $("input[name='test']:checked");
               //对checkbox进行判断是否进行选中,
               if(checkbox.size() > 0){
                   var ids = ""
                   $(checkbox).each(function(){
                       ids +=  $(this).attr("id")+"|";//对选中的多个文件的id进行拼接
                   });

                    $("#ids").val(ids);
                    document.forms[0].action ="${createLink(controller: 'download', action: 'downloadMoreFile')}";
                    document.forms[0].submit();
                      } else {
                         window.alert("Please select at least one record to be exported!");
                         return;
                      }
                });
           });

3.后台语言
在工程文件中的Config.groovy配置文件中进行下载文件的基本路径进行配置

environments {
    development {
        grails.logging.jul.usebridge = true
        manageengine.basePath = "D:\\test\\"//下载文件在本地D盘test文件夹中
    }
}

4.DownloadControoler中编写downloadMoreFile方法

 def downloadMoreFile() {
 def basePath = grailsApplication.config.manageengine.basePath//获取配置文件中的文件存放地址
        def fileId = null; def _attrs; 
        def ids = params.ids?.split("\\|")//获取前台传输的多个id,并进行拆分
        String zipFileName = "${basePath}${fileName}.zip"//设置压缩文件名
        List<File> files = new ArrayList<File>()
        ids.each() {//遍历每个文件的id
            String FileName = "${basePath}${it}.txt"//设置每个文件的文件名
            File file = new File(mfFileName);
            if (file.exists()) {//判断文件是否存在
                files.add(file);//将每个文件放在文件集合中
            } 
        }
        commonService.zip(files, zipFileName)//对多个文件的集合体进行压缩
        File zipFile = new File(zipFileName)
        response.setContentType("application/zip")//设置请求体
        response.setHeader("Content-disposition", "attachment;filename=${fileName}.zip")//设置请求头
        response.outputStream << zipFile.newInputStream()//下载数据

}

/*******************commonService.zip方法(xx,xx)**************************/

    public void zip(List<File> files, String zipFileName) {

        OutputStream os = null;
        BufferedOutputStream bos = null;
        try {
            os = new FileOutputStream(zipFileName);
            bos = new BufferedOutputStream(os);
            ZipOutputStream zos = new ZipOutputStream(bos);
            for (File file : files) {
                String basePath = null;
                if (file.isDirectory()) {
                    basePath = file.getPath();
                } else {
                    basePath = file.getParent();
                }
                zipFile(file, basePath, zos);
            }
            zos.closeEntry();
            zos.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                     e.printStackTrace();
                }
            }
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值