下载接口修改

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.resp.sftpFile.FileBase64DownloadResp;
import cd.casic.ci.process.dto.resp.target.TargetManagerResp;
import cd.casic.ci.process.dto.resp.target.TargetVersionResp;
import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
@ -138,8 +139,8 @@ public class TargetController {
}
@PostMapping(path="/zipDownload")
public void zipDownload(@RequestBody @Valid BaseIdReq req, HttpServletResponse response){
targetManagerService.zipDownload(req,response);
public CommonResult<FileBase64DownloadResp> zipDownload(@RequestBody @Valid BaseIdReq req, HttpServletResponse response){
return CommonResult.success(targetManagerService.zipDownload(req, response));
}
@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.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.process.dataObject.base.BaseIdReq;
import cd.casic.ci.process.process.service.testCase.TestCaseManagerService;
import cd.casic.framework.commons.pojo.CommonResult;
import cd.casic.framework.commons.pojo.PageResult;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.SftpException;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
/**
@ -86,7 +82,7 @@ public class TestCaseManagerController {
return CommonResult.success(resp);
}
@GetMapping("/downLoadById")
public CommonResult<TestCaseManagerDownloadResp> downLoadByManagerId(@RequestParam String managerId){
public CommonResult<FileBase64DownloadResp> downLoadByManagerId(@RequestParam String 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 org.springframework.web.multipart.MultipartFile;
import java.io.OutputStream;
import java.util.List;
/**
@ -20,4 +21,5 @@ public interface SftpFileService{
void downloadFile(String remoteFilePath, 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) {
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.resp.sftpFile.FileBase64DownloadResp;
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.target.TargetManager;
@ -42,5 +43,5 @@ public interface TargetManagerService extends IService<TargetManager> {
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.resp.sftpFile.FileBase64DownloadResp;
import cd.casic.ci.process.dto.resp.target.TargetManagerResp;
import cd.casic.ci.process.dto.resp.target.TargetVersionResp;
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.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.*;
/**
* @author HopeLi
@ -296,7 +294,7 @@ public class TargetManagerServiceImpl extends ServiceImpl<TargetManagerDao, Targ
}
@Override
public void zipDownload(BaseIdReq req, HttpServletResponse response){
public FileBase64DownloadResp zipDownload(BaseIdReq req, HttpServletResponse response){
if (ObjectUtils.isEmpty(req.getId())){
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();
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.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.process.dataObject.testCase.TestCaseManager;
import cd.casic.framework.commons.pojo.PageResult;
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 java.io.IOException;
import java.util.List;
/**
@ -37,6 +33,6 @@ public interface TestCaseManagerService extends IService<TestCaseManager> {
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.TestCaseManagerReq;
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.process.converter.TestCaseManagerConverter;
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.jcraft.jsch.*;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
@ -151,7 +150,7 @@ public class TestCaseManagerServiceImpl extends ServiceImpl<TestCaseManagerDao,
}
@Override
public TestCaseManagerDownloadResp downLoadById(String id) {
public FileBase64DownloadResp downLoadById(String id) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try (ZipOutputStream zipOutputStream = new ZipOutputStream(bos)){
JSch jsch = new JSch();
@ -182,7 +181,7 @@ public class TestCaseManagerServiceImpl extends ServiceImpl<TestCaseManagerDao,
}
byte[] byteArray = bos.toByteArray();
String file = Base64.getEncoder().encodeToString(byteArray);
TestCaseManagerDownloadResp testCaseManagerDownloadResp = new TestCaseManagerDownloadResp();
FileBase64DownloadResp testCaseManagerDownloadResp = new FileBase64DownloadResp();
testCaseManagerDownloadResp.setFile(file);
testCaseManagerDownloadResp.setFileName("SEED.zip");
return testCaseManagerDownloadResp;