feat: ASW-26 pcap download 接口开发

This commit is contained in:
zhangshuai
2024-08-06 15:33:37 +08:00
parent b6cbe6094f
commit 875eb83d6e

View File

@@ -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<String> pcapIdList = Arrays.asList(ids.split(","));
List<PcapEntity> 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<File> 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);
}
}
}