From 875eb83d6e27516dabd9998a76fe5ca33b537478 Mon Sep 17 00:00:00 2001 From: zhangshuai Date: Tue, 6 Aug 2024 15:33:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20ASW-26=20pcap=20download=20=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../runner/controller/PcapController.java | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/geedge/asw/module/runner/controller/PcapController.java b/src/main/java/net/geedge/asw/module/runner/controller/PcapController.java index 2fc287e..a52bd59 100644 --- a/src/main/java/net/geedge/asw/module/runner/controller/PcapController.java +++ b/src/main/java/net/geedge/asw/module/runner/controller/PcapController.java @@ -1,19 +1,23 @@ package net.geedge.asw.module.runner.controller; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import cn.hutool.log.Log; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.geedge.asw.common.util.R; -import net.geedge.asw.common.util.RCode; -import net.geedge.asw.common.util.T; +import jakarta.servlet.http.HttpServletResponse; +import net.geedge.asw.common.util.*; import net.geedge.asw.module.runner.entity.PcapEntity; import net.geedge.asw.module.runner.service.IPcapService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.File; import java.io.IOException; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -101,4 +105,24 @@ public class PcapController { pcapService.parse2session(ids); return R.ok(); } + + + @GetMapping("/download") + public void download(HttpServletResponse response, String ids) throws IOException { + T.VerifyUtil.is(ids).notEmpty(); + List pcapIdList = Arrays.asList(ids.split(",")); + List pcapList = pcapService.listByIds(pcapIdList); + if (T.CollectionUtil.isNotEmpty(pcapList) && pcapList.size() == 1) { + PcapEntity first = pcapList.getFirst(); + File pcapFile = T.FileUtil.file(first.getPath()); + ResponseUtil.downloadFile(response, MediaType.APPLICATION_OCTET_STREAM_VALUE, first.getName(), T.FileUtil.readBytes(pcapFile)); + } + if (pcapList.size() > 1) { + File zipFile = T.FileUtil.file(T.StrUtil.concat(true, Constants.TEMP_PATH, "/", "pcap-", DateUtil.format(DateUtil.date(), DatePattern.PURE_DATETIME_PATTERN) + ".zip")); + List fileList = pcapList.stream().map(x -> T.FileUtil.file(x.getPath())).toList(); + T.ZipUtil.zip(zipFile, false, fileList.toArray(new File[0])); + ResponseUtil.downloadFile(response, zipFile.getName(), T.FileUtil.readBytes(zipFile)); + T.FileUtil.del(zipFile); + } + } } \ No newline at end of file