2021-01-30

根据业务批量下载成一个压缩包接口实现

    @GetMapping(value = "batchDownLoad")
    public Result batchDownLoad(String uuid, HttpServletResponse response) {

        //下载的压缩包的名
        String downloadFilename = UUID.randomUUID().toString().replace("-", "");
        log.info("下载的压缩包的名:" +downloadFilename);
        ZipOutputStream zos = null;
        InputStream in = null;
        try {
            response.setContentType("application/octet-stream");// 指明response的返回对象是文件流
            response.setHeader("Content-Disposition", "attachment; filename=" +downloadFilename + ".zip");
            zos = new ZipOutputStream(response.getOutputStream());
            List<String> collect = new ArrayList<>();
            HashMap<String, InputStream>  fileMap = new HashMap<>();

            List<ParkNoticeDetailsForm> parkNoticeDetailsForms = parkNoticeDetailsService.selectByUuid(uuid);
            if (!CollectionUtils.isEmpty(parkNoticeDetailsForms)) {
                 collect= parkNoticeDetailsForms.stream().filter(p -> p.getFileUrl() != null).map(ParkNoticeDetailsForm::getFileUrl).collect(Collectors.toList());
            }
            if (CollectionUtils.isEmpty(collect)){
                return Result.customFail("没有可下载的文件");
            }
            for (String string : collect) {
                String[] split1 = string.split(",");
                for (String s: split1) {
                    InputStream fileInputStream = fileUploader.getFileInputStream(s);
                    String[] split = s.split("-");
                    fileMap.put(split[split.length-1], fileInputStream);
                }
            }
            for (Map.Entry<String, InputStream> fileMaps : fileMap.entrySet()) {
                String newFileName = fileMaps.getKey();
                //打压缩包
                //entry.getKey()就是上述所说的最外层的文件夹,也是自己定义的。
                zos.putNextEntry(new ZipEntry(newFileName));
                //文件路径放入流
                in = fileMaps.getValue();
                byte[] buffer = new byte[1024];
                int r = 0;
                while ((r = in.read(buffer)) != -1) {
                    zos.write(buffer, 0, r);
                }
                in.close();
                zos.flush();
            }
        } catch (Exception e) {
//            log.error("zipFiles error!!", e);
        } finally {
            if (zos!=null) {
                try {
                    zos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    zos.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (in!=null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return null;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值