下载接口修改

This commit is contained in:
even 2025-07-24 16:24:11 +08:00
parent d22f86658f
commit f7e0f1efe0
10 changed files with 60 additions and 34 deletions

View File

@ -2,6 +2,7 @@ package cd.casic.ci.api;
import cd.casic.ci.process.dto.req.target.*; import cd.casic.ci.process.dto.req.target.*;
import cd.casic.ci.process.dto.resp.sftpFile.FileBase64DownloadResp;
import cd.casic.ci.process.dto.resp.target.TargetManagerResp; import cd.casic.ci.process.dto.resp.target.TargetManagerResp;
import cd.casic.ci.process.dto.resp.target.TargetVersionResp; import cd.casic.ci.process.dto.resp.target.TargetVersionResp;
import cd.casic.ci.process.process.dataObject.base.BaseIdReq; import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
@ -138,8 +139,8 @@ public class TargetController {
} }
@PostMapping(path="/zipDownload") @PostMapping(path="/zipDownload")
public void zipDownload(@RequestBody @Valid BaseIdReq req, HttpServletResponse response){ public CommonResult<FileBase64DownloadResp> zipDownload(@RequestBody @Valid BaseIdReq req, HttpServletResponse response){
targetManagerService.zipDownload(req,response); return CommonResult.success(targetManagerService.zipDownload(req, response));
} }
@PostMapping(path = "/uploadFolder") @PostMapping(path = "/uploadFolder")

View File

@ -3,21 +3,17 @@ package cd.casic.ci.api;
import cd.casic.ci.process.dto.req.testCase.TestCaseManagerQueryReq; import cd.casic.ci.process.dto.req.testCase.TestCaseManagerQueryReq;
import cd.casic.ci.process.dto.req.testCase.TestCaseManagerReq; import cd.casic.ci.process.dto.req.testCase.TestCaseManagerReq;
import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerDownloadResp; import cd.casic.ci.process.dto.resp.sftpFile.FileBase64DownloadResp;
import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerResp; import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerResp;
import cd.casic.ci.process.process.dataObject.base.BaseIdReq; import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
import cd.casic.ci.process.process.service.testCase.TestCaseManagerService; import cd.casic.ci.process.process.service.testCase.TestCaseManagerService;
import cd.casic.framework.commons.pojo.CommonResult; import cd.casic.framework.commons.pojo.CommonResult;
import cd.casic.framework.commons.pojo.PageResult; import cd.casic.framework.commons.pojo.PageResult;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.SftpException;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
@ -86,7 +82,7 @@ public class TestCaseManagerController {
return CommonResult.success(resp); return CommonResult.success(resp);
} }
@GetMapping("/downLoadById") @GetMapping("/downLoadById")
public CommonResult<TestCaseManagerDownloadResp> downLoadByManagerId(@RequestParam String managerId){ public CommonResult<FileBase64DownloadResp> downLoadByManagerId(@RequestParam String managerId){
return CommonResult.success(testCaseManagerService.downLoadById(managerId)); return CommonResult.success(testCaseManagerService.downLoadById(managerId));
} }
} }

View File

@ -0,0 +1,9 @@
package cd.casic.ci.process.dto.resp.sftpFile;
import lombok.Data;
@Data
public class FileBase64DownloadResp {
private String fileName;
private String file;
}

View File

@ -1,9 +0,0 @@
package cd.casic.ci.process.dto.resp.testCase;
import lombok.Data;
@Data
public class TestCaseManagerDownloadResp {
private String fileName;
private String file;
}

View File

@ -4,6 +4,7 @@ package cd.casic.ci.process.process.service.sftpFile;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.OutputStream;
import java.util.List; import java.util.List;
/** /**
@ -20,4 +21,5 @@ public interface SftpFileService{
void downloadFile(String remoteFilePath, HttpServletResponse response); void downloadFile(String remoteFilePath, HttpServletResponse response);
void downloadFilesAsZip(List<String> remoteFilePaths, String zipFileName, HttpServletResponse response); void downloadFilesAsZip(List<String> remoteFilePaths, String zipFileName, HttpServletResponse response);
public void downloadFilesAsZip(List<String> remoteFilePaths, OutputStream outputStream);
} }

View File

@ -94,7 +94,32 @@ public class SftpFileServiceImpl implements SftpFileService {
} }
} }
@Override
public void downloadFilesAsZip(List<String> remoteFilePaths, OutputStream outputStream) {
try (SftpClientUtils client = new SftpClientUtils(fileUploadProperties.getRemoteHost(),
fileUploadProperties.getRemotePort(),
fileUploadProperties.getUsername(),
fileUploadProperties.getPassword(),
fileUploadProperties.getSshKeyPath())) {
try (ZipOutputStream zipOut = new ZipOutputStream(outputStream)) {
for (String remoteFilePath : remoteFilePaths) {
String fileName = remoteFilePath.substring(remoteFilePath.lastIndexOf("/") + 1);
try (InputStream in = client.downloadFileToStream(remoteFilePath)) {
zipOut.putNextEntry(new ZipEntry(fileName));
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) > 0) {
zipOut.write(buffer, 0, bytesRead);
}
zipOut.closeEntry();
}
}
}
} catch (Exception e) {
throw new RuntimeException("批量下载并打包 ZIP 失败: " + e.getMessage(), e);
}
}
private String saveTempFile(MultipartFile file) { private String saveTempFile(MultipartFile file) {
try { try {

View File

@ -2,6 +2,7 @@ package cd.casic.ci.process.process.service.target;
import cd.casic.ci.process.dto.req.target.*; import cd.casic.ci.process.dto.req.target.*;
import cd.casic.ci.process.dto.resp.sftpFile.FileBase64DownloadResp;
import cd.casic.ci.process.dto.resp.target.TargetManagerResp; import cd.casic.ci.process.dto.resp.target.TargetManagerResp;
import cd.casic.ci.process.process.dataObject.base.BaseIdReq; import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
import cd.casic.ci.process.process.dataObject.target.TargetManager; import cd.casic.ci.process.process.dataObject.target.TargetManager;
@ -42,5 +43,5 @@ public interface TargetManagerService extends IService<TargetManager> {
void fileDownload(@Valid BaseIdReq req, HttpServletResponse response); void fileDownload(@Valid BaseIdReq req, HttpServletResponse response);
void zipDownload(@Valid BaseIdReq req, HttpServletResponse response); FileBase64DownloadResp zipDownload(@Valid BaseIdReq req, HttpServletResponse response);
} }

View File

@ -2,6 +2,7 @@ package cd.casic.ci.process.process.service.target.impl;
import cd.casic.ci.process.dto.req.target.*; import cd.casic.ci.process.dto.req.target.*;
import cd.casic.ci.process.dto.resp.sftpFile.FileBase64DownloadResp;
import cd.casic.ci.process.dto.resp.target.TargetManagerResp; import cd.casic.ci.process.dto.resp.target.TargetManagerResp;
import cd.casic.ci.process.dto.resp.target.TargetVersionResp; import cd.casic.ci.process.dto.resp.target.TargetVersionResp;
import cd.casic.ci.process.process.converter.TargetConverter; import cd.casic.ci.process.process.converter.TargetConverter;
@ -37,10 +38,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
/** /**
* @author HopeLi * @author HopeLi
@ -296,7 +294,7 @@ public class TargetManagerServiceImpl extends ServiceImpl<TargetManagerDao, Targ
} }
@Override @Override
public void zipDownload(BaseIdReq req, HttpServletResponse response){ public FileBase64DownloadResp zipDownload(BaseIdReq req, HttpServletResponse response){
if (ObjectUtils.isEmpty(req.getId())){ if (ObjectUtils.isEmpty(req.getId())){
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"目标管理id不能为空"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"目标管理id不能为空");
} }
@ -315,7 +313,15 @@ public class TargetManagerServiceImpl extends ServiceImpl<TargetManagerDao, Targ
} }
List<String> filePathList = targetVersionList.stream().map(TargetVersion::getFilePath).toList(); List<String> filePathList = targetVersionList.stream().map(TargetVersion::getFilePath).toList();
sftpFileService.downloadFilesAsZip(filePathList,targetManager.getTargetName(),response); ByteArrayOutputStream bos = new ByteArrayOutputStream();
String targetName = targetManager.getTargetName();
sftpFileService.downloadFilesAsZip(filePathList,bos);
byte[] byteArray = bos.toByteArray();
String file = Base64.getEncoder().encodeToString(byteArray);
FileBase64DownloadResp resp = new FileBase64DownloadResp();
resp.setFile(file);
resp.setFileName(targetName);
return resp;
} }

View File

@ -3,17 +3,13 @@ package cd.casic.ci.process.process.service.testCase;
import cd.casic.ci.process.dto.req.testCase.TestCaseManagerQueryReq; import cd.casic.ci.process.dto.req.testCase.TestCaseManagerQueryReq;
import cd.casic.ci.process.dto.req.testCase.TestCaseManagerReq; import cd.casic.ci.process.dto.req.testCase.TestCaseManagerReq;
import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerDownloadResp; import cd.casic.ci.process.dto.resp.sftpFile.FileBase64DownloadResp;
import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerResp; import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerResp;
import cd.casic.ci.process.process.dataObject.testCase.TestCaseManager; import cd.casic.ci.process.process.dataObject.testCase.TestCaseManager;
import cd.casic.framework.commons.pojo.PageResult; import cd.casic.framework.commons.pojo.PageResult;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.SftpException;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
@ -37,6 +33,6 @@ public interface TestCaseManagerService extends IService<TestCaseManager> {
TestCaseManagerResp findById(String id); TestCaseManagerResp findById(String id);
TestCaseManagerDownloadResp downLoadById(String id ); FileBase64DownloadResp downLoadById(String id );
} }

View File

@ -4,7 +4,7 @@ package cd.casic.ci.process.process.service.testCase.impl;
import cd.casic.ci.process.dto.req.testCase.TestCaseManagerQueryReq; import cd.casic.ci.process.dto.req.testCase.TestCaseManagerQueryReq;
import cd.casic.ci.process.dto.req.testCase.TestCaseManagerReq; import cd.casic.ci.process.dto.req.testCase.TestCaseManagerReq;
import cd.casic.ci.process.dto.resp.testCase.TestCaseInfoResp; import cd.casic.ci.process.dto.resp.testCase.TestCaseInfoResp;
import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerDownloadResp; import cd.casic.ci.process.dto.resp.sftpFile.FileBase64DownloadResp;
import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerResp; import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerResp;
import cd.casic.ci.process.process.converter.TestCaseManagerConverter; import cd.casic.ci.process.process.converter.TestCaseManagerConverter;
import cd.casic.ci.process.process.dao.testCase.TestCaseInfoDao; import cd.casic.ci.process.process.dao.testCase.TestCaseInfoDao;
@ -26,7 +26,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jcraft.jsch.*; import com.jcraft.jsch.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -151,7 +150,7 @@ public class TestCaseManagerServiceImpl extends ServiceImpl<TestCaseManagerDao,
} }
@Override @Override
public TestCaseManagerDownloadResp downLoadById(String id) { public FileBase64DownloadResp downLoadById(String id) {
ByteArrayOutputStream bos = new ByteArrayOutputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream();
try (ZipOutputStream zipOutputStream = new ZipOutputStream(bos)){ try (ZipOutputStream zipOutputStream = new ZipOutputStream(bos)){
JSch jsch = new JSch(); JSch jsch = new JSch();
@ -182,7 +181,7 @@ public class TestCaseManagerServiceImpl extends ServiceImpl<TestCaseManagerDao,
} }
byte[] byteArray = bos.toByteArray(); byte[] byteArray = bos.toByteArray();
String file = Base64.getEncoder().encodeToString(byteArray); String file = Base64.getEncoder().encodeToString(byteArray);
TestCaseManagerDownloadResp testCaseManagerDownloadResp = new TestCaseManagerDownloadResp(); FileBase64DownloadResp testCaseManagerDownloadResp = new FileBase64DownloadResp();
testCaseManagerDownloadResp.setFile(file); testCaseManagerDownloadResp.setFile(file);
testCaseManagerDownloadResp.setFileName("SEED.zip"); testCaseManagerDownloadResp.setFileName("SEED.zip");
return testCaseManagerDownloadResp; return testCaseManagerDownloadResp;