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