diff --git a/modules/module-ci-machine/pom.xml b/modules/module-ci-machine/pom.xml index 64ee895a..ce137127 100644 --- a/modules/module-ci-machine/pom.xml +++ b/modules/module-ci-machine/pom.xml @@ -57,6 +57,13 @@ springdoc-openapi-starter-webmvc-ui 2.3.0 + + + cd.casic.boot + module-infra-biz + ${revision} + + diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/configuration/AliYunConfig.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/configuration/AliYunConfig.java deleted file mode 100644 index 9a84250c..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/configuration/AliYunConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package cd.casic.module.machine.configuration; - -import cd.casic.module.machine.exception.ServiceException; -import com.aliyun.oss.OSS; -import com.aliyun.oss.OSSClientBuilder; - -import lombok.Getter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -//@Configuration -@Getter -public class AliYunConfig { - private static final Logger logger = LoggerFactory.getLogger(AliYunConfig.class); - @Value("${aliyun.oss.endpoint}") - private String endpoint; - @Value("${aliyun.oss.accessKeyId}") - private String accessKeyId; - @Value("${aliyun.oss.accessKeySecret}") - private String accessKeySecret; - @Value("${aliyun.oss.bucketName}") - private String bucketName; - -// @Bean - public OSS ossClient() { - logger.info("OSS域名: {}", endpoint); - logger.info("AccessKeyId: {}", accessKeyId); - - // 添加参数校验 - if (endpoint == null || accessKeyId == null || accessKeySecret == null) { - throw new ServiceException(ServiceException.OSS_PARAM_NULL,"OSS参数为空"); - } - - return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); - } -} diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/configuration/AliYunOssConfig.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/configuration/AliYunOssConfig.java new file mode 100644 index 00000000..a7ab3183 --- /dev/null +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/configuration/AliYunOssConfig.java @@ -0,0 +1,33 @@ +package cd.casic.module.machine.configuration; + +import cd.casic.module.infra.framework.file.core.client.s3.S3FileClientConfig; +import cd.casic.module.machine.utils.AliYunOssClient; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration + public class AliYunOssConfig extends S3FileClientConfig{ + @Value("${aliyun.oss.endpoint}") + private String endpoint; + @Value("${aliyun.oss.accessKeyId}") + private String accessKey; + @Value("${aliyun.oss.accessKeySecret}") + private String accessSecret; + @Value("${aliyun.oss.bucketName}") + private String bucket; + // 定义 S3 客户端 Bean + @Bean + public AliYunOssClient aliYunClient() { + // 创建配置对象 + S3FileClientConfig config = new AliYunOssConfig(); + config.setEndpoint(endpoint); + config.setAccessKey(accessKey); + config.setAccessSecret(accessSecret); + config.setBucket(bucket); + AliYunOssClient aliYunOssClient = new AliYunOssClient(1L, config); + // 创建并返回客户端实例 + aliYunOssClient.init(); + return aliYunOssClient; + } +} diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java index cb352d41..32f5f061 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java @@ -8,15 +8,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import org.springframework.core.io.InputStreamResource; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RequestPart; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -30,31 +22,27 @@ public class SecretKeyController { @Resource private SecretKeyService secretKeyService; - @PostMapping(value = "/add", consumes = "multipart/form-data") + @PostMapping(value = "/add") @Operation(summary ="新增密钥") - public CommonResult add(@RequestBody SecretKeyDto secretKeyDto, @RequestPart("file") MultipartFile file) { - return success(secretKeyService.addSecretKey(secretKeyDto, file)); + public CommonResult add(@RequestBody SecretKeyDto secretKeyDto) throws Exception { + return success(secretKeyService.addSecretKey(secretKeyDto)); } @PutMapping("/bindingMachine") @Operation(summary ="绑定机器") - public CommonResult bindingMachine(@RequestParam("secretKeyId") Long secretKeyId, @RequestParam("machineInfoIds") List machineInfoIds) { - secretKeyService.bindingMachine(secretKeyId, machineInfoIds); + public CommonResult bindingMachine(@RequestParam("secretKeyId") Long secretKeyId, @RequestParam("machineIds") List machineIds) { + secretKeyService.bindingMachine(secretKeyId, machineIds); return success(true); } @PutMapping("/update") @Operation(summary ="编辑密钥信息") - public CommonResult update(@RequestBody SecretKeyDto secretKeyDto, @RequestPart(value = "file", required = false) MultipartFile file) { - return success(secretKeyService.updateSecretKey(secretKeyDto, file)); + public CommonResult update(@RequestBody SecretKeyDto secretKeyDto) { + return success(secretKeyService.updateSecretKey(secretKeyDto)); } - @DeleteMapping("/delete") - @Operation(summary ="删除密钥") - public CommonResult delete(@RequestParam("secretKeyId") Long secretKeyId) { - return success(secretKeyService.deleteSecretKey(secretKeyId)); - } + @DeleteMapping("/deleteList") @Operation(summary ="批量删除密钥") @@ -68,9 +56,5 @@ public class SecretKeyController { return success(secretKeyService.listSecretKey(secretKeyDto)); } - @GetMapping("/downloadSecretKeyFile") - @Operation(summary ="下载密钥文件") - public CommonResult downloadSecretKeyFile(@RequestParam("secretKeyId") Long secretKeyId) { - return success(secretKeyService.downloadSecretKeyFile(secretKeyId).getBody()); - } + } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/SecretKeyDto.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/SecretKeyDto.java index e5aa6c4e..414486ea 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/SecretKeyDto.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/SecretKeyDto.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import org.springframework.web.multipart.MultipartFile; import java.util.Date; +import java.util.List; @EqualsAndHashCode(callSuper = true) @Data @@ -19,12 +20,9 @@ public class SecretKeyDto extends PageDto { private String description; - //存储路径 + //存储路径,本地上传文件路径 private String path; - //密钥文件 - private MultipartFile file; - private String fileName; //密钥密码 diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/SecretKey.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/SecretKey.java index 18d3b3f4..f747c461 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/SecretKey.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/SecretKey.java @@ -19,7 +19,7 @@ public class SecretKey extends BaseEntity{ @TableField(value = "description") private String description; - //存储路径 + //oss存储路径 @TableField(value = "path") private String path; diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/exception/ServiceException.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/exception/ServiceException.java index a4f2a62e..90f3b4d8 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/exception/ServiceException.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/exception/ServiceException.java @@ -1,5 +1,6 @@ package cd.casic.module.machine.exception; +import cd.casic.module.machine.entity.SecretKey; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -37,6 +38,8 @@ public class ServiceException extends RuntimeException { public static final int MACHINE_ENV_KEY_ILLEGAL = 565; //oss参数无法读取 public static final int OSS_PARAM_NULL = 1001; + //密钥为空 + public static final int SECRETKEY_NULL = 1002; /** * 业务错误码 diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/handler/ConnectionSession.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/handler/ConnectionSession.java index ddfa59d4..05a758e4 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/handler/ConnectionSession.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/handler/ConnectionSession.java @@ -1,8 +1,8 @@ package cd.casic.module.machine.handler; +import cd.casic.module.machine.utils.AliYunOssClient; import cd.casic.module.machine.entity.MachineInfo; -import cd.casic.module.machine.utils.AliOssUtil; import cd.casic.module.machine.entity.SecretKey; import cd.casic.module.machine.enums.AuthenticationType; import cd.casic.module.machine.enums.ConnectionStatus; @@ -28,7 +28,7 @@ public class ConnectionSession implements AutoCloseable { SecretKeyService secretKeyService; @Resource - AliOssUtil aliOssUtil; + AliYunOssClient aliYunOssClient; private final MachineInfo machineInfo; private Session sshSession; @@ -602,7 +602,16 @@ public class ConnectionSession implements AutoCloseable { return null; } SecretKey secretKey = secretKeyService.getById(secretKeyId); - InputStream read = aliOssUtil.read(secretKey.getFileName()); + byte[] content; + try { + content = aliYunOssClient.getContent(secretKey.getPath().substring(secretKey.getPath().lastIndexOf("/") + 1)); + } catch (Exception e) { + throw new RuntimeException(e); + } + + //改为S3FileClient读取 + InputStream read = new ByteArrayInputStream(content); + try { return StreamUtils.copyToString(read, StandardCharsets.UTF_8); } catch (IOException e) { diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java index b0cae86a..b9647850 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java @@ -11,17 +11,16 @@ import org.springframework.web.multipart.MultipartFile; import java.util.List; public interface SecretKeyService extends IService { - boolean addSecretKey(SecretKeyDto secretKeyDto, MultipartFile file); + boolean addSecretKey(SecretKeyDto secretKeyDto) throws Exception; void bindingMachine(Long secretKeyId, List machineInfoIds); - boolean updateSecretKey(SecretKeyDto secretKeyDto,MultipartFile file); + boolean updateSecretKey(SecretKeyDto secretKeyDto); - boolean deleteSecretKey(Long secretKeyId); PageResult listSecretKey(SecretKeyDto secretKeyDto); - ResponseEntity downloadSecretKeyFile(Long secretKeyId); + boolean deleteList(List secretKeyIds); } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java index 2a762343..2b4d6c2d 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java @@ -4,90 +4,96 @@ import cd.casic.module.machine.dto.SecretKeyDto; import cd.casic.module.machine.entity.MachineInfo; import cd.casic.module.machine.entity.SecretKey; import cd.casic.module.machine.mapper.SecretServiceMapper; -import cd.casic.module.machine.utils.AliOssUtil; +import cd.casic.module.machine.service.MachineInfoService; import cd.casic.module.machine.utils.PageResult; +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import cd.casic.module.machine.configuration.AliYunConfig; +import cd.casic.module.machine.utils.AliYunOssClient; import cd.casic.module.machine.exception.ServiceException; -import cd.casic.module.machine.service.MachineInfoService; +//import cd.casic.module.machine.service.MachineInfoService; import cd.casic.module.machine.service.SecretKeyService; import jakarta.annotation.Resource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; -import org.springframework.core.io.InputStreamResource; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; @Service public class SecretKeyServiceImpl extends ServiceImpl implements SecretKeyService { - @Resource - private AliOssUtil aliOssUtil; @Resource private MachineInfoService machineInfoService; -// @Resource - private AliYunConfig aliYunConfig; + @Resource + private AliYunOssClient aliYunOssClient; @Resource private SecretServiceMapper secretServiceMapper; - //todo public方便测试,后面改为private - public static final ExecutorService FILE_DELETE_EXECUTOR = Executors.newFixedThreadPool(10); - - Logger logger = LoggerFactory.getLogger(SecretKeyServiceImpl.class); @Override - public boolean addSecretKey(SecretKeyDto secretKeyDto, MultipartFile file) { - secretKeyDto.setFile(file); - String fileName = aliOssUtil.save(file); - String path = "https://" + aliYunConfig.getBucketName() + "." + aliYunConfig.getEndpoint() + "/" + fileName; - secretKeyDto.setPath(path); - secretKeyDto.setFileName(fileName); - SecretKey secretKey = new SecretKey(); - BeanUtils.copyProperties(secretKeyDto,secretKey); - return this.save(secretKey); - } - - @Override - public void bindingMachine(Long secretKeyId, List machineInfoIds) { - List machineInfos = machineInfoService.listByIds(machineInfoIds); - machineInfos.forEach(machineInfo -> machineInfo.setSecretKeyId(secretKeyId)); - machineInfoService.updateBatchById(machineInfos); - } - - @Override - public boolean updateSecretKey(SecretKeyDto secretKeyDto, MultipartFile file) { - if (file != null){ - secretKeyDto.setFile(file); - String fileName = aliOssUtil.save(file); - String path = "https://" + aliYunConfig.getBucketName() + "." + aliYunConfig.getEndpoint() + "/" + fileName; - secretKeyDto.setPath(path); - secretKeyDto.setFileName(fileName); + public boolean addSecretKey(SecretKeyDto secretKeyDto){ + if (secretKeyDto.getPath()==null) + { + throw new ServiceException(ServiceException.MACHINE_PROXY_NULL,"密钥不能为空"); } + + String ossPath = upLoadSecretKey(secretKeyDto.getPath()); + if (ossPath == null){ + throw new ServiceException(ServiceException.MACHINE_PROXY_NULL,"密钥上传失败"); + } + secretKeyDto.setPath(ossPath); SecretKey secretKey = new SecretKey(); BeanUtils.copyProperties(secretKeyDto,secretKey); + //todo检查密钥合法 + return this.save(secretKey); + + + } + @Override + public boolean updateSecretKey(SecretKeyDto secretKeyDto) { + + Long id = secretKeyDto.getId(); + SecretKey secretKey = this.getById(id); + if (secretKey == null){ + throw new ServiceException(ServiceException.MACHINE_PROXY_NULL,"密钥不存在"); + } + if (!secretKey.getPath().equals(secretKeyDto.getPath())) { + //todo检查密钥合法 + String ossPath = upLoadSecretKey(secretKeyDto.getPath()); + BeanUtils.copyProperties(secretKeyDto,secretKey); + secretKey.setPath(ossPath); + } + else { + BeanUtils.copyProperties(secretKeyDto,secretKey); + } + return this.updateById(secretKey); + + } @Override - public boolean deleteSecretKey(Long secretKeyId) { - String fileName = this.getById(secretKeyId).getFileName(); - aliOssUtil.deleteFile(fileName); - return this.removeById(secretKeyId); + public void bindingMachine(Long secretKeyId, List machineIds) { + SecretKey secretKey = this.getById(secretKeyId); + if (secretKey==null){ + throw new ServiceException(ServiceException.SECRETKEY_NULL,"密钥不存在"); + } + List machineList = machineInfoService.listByIds(machineIds); + machineList.forEach(machine -> machine.setSecretKeyId(secretKeyId)); + machineInfoService.updateBatchById(machineList); } + + + + @Override public PageResult listSecretKey(SecretKeyDto secretKeyDto) { QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -107,28 +113,48 @@ public class SecretKeyServiceImpl extends ServiceImpl downloadSecretKeyFile(Long secretKeyId) { - String fileName = this.getById(secretKeyId).getFileName(); - return aliOssUtil.downloadFile(fileName); - } + @Override public boolean deleteList(List secretKeyIds) { List secretKeys = this.listByIds(secretKeyIds); - // 提交异步任务到线程池 - FILE_DELETE_EXECUTOR.execute(() -> { - try { - for (SecretKey secretKey : secretKeys) { - if (secretKey.getFileName() != null && !secretKey.getFileName().isEmpty()){ - aliOssUtil.deleteFile(secretKey.getFileName()); - } + + for (SecretKey secretKey : secretKeys) { + if (secretKey.getPath() != null && !secretKey.getPath().isEmpty()){ + try { + //文件名 + //删除子目录文件,需要在前面加上根目录文件路径 + String fileName = secretKey.getPath().substring(secretKey.getPath().lastIndexOf("/") + 1); + aliYunOssClient.delete(fileName); + } catch (Exception e) { + throw new RuntimeException(e); } - } catch (Exception e) { - logger.error("异步删除文件失败:{}", e.getMessage()); - throw new ServiceException(ServiceException.DELETE_FILE_FAIL,"异步删除文件失败:"+e.getMessage()); } - }); + } + + + //todo是否删除已经绑定的机器 return secretServiceMapper.deleteBatchIds(secretKeyIds) > 0 ; } + + + public String upLoadSecretKey(String localPath) { + + //使用S3FileClient上传文件 + aliYunOssClient.init(); + + //传输到指定文件,需要在path前面加上文件路径 + String path = IdUtil.fastSimpleUUID() + ".txt"; + + + //上传文件是从本地上传,这里传的是本地文件地址 + byte[] content = ResourceUtil.readBytes(localPath); + String ossPath; + try { + ossPath = aliYunOssClient.upload(content, path, "txt"); + }catch (Exception e) { + throw new RuntimeException(e+"上传文件失败"); + } + return ossPath; + } } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/AliOssUtil.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/AliOssUtil.java deleted file mode 100644 index fc185e7e..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/AliOssUtil.java +++ /dev/null @@ -1,113 +0,0 @@ -package cd.casic.module.machine.utils; - -import cd.casic.module.machine.configuration.AliYunConfig; -import cd.casic.module.machine.exception.ServiceException; -import com.aliyun.oss.OSS; -import com.aliyun.oss.model.OSSObject; -import jakarta.annotation.Resource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.InputStreamResource; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Component; -import org.springframework.web.multipart.MultipartFile; - -import java.io.InputStream; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; - - -@Component -public class AliOssUtil{ - -// @Autowired - private OSS ossClient; - -// @Resource - private AliYunConfig aliyunConfig; - - private static final Logger logger = LoggerFactory.getLogger(AliOssUtil.class); - - public String save(MultipartFile file) { - try { - String fileName = generateUniqueFileName(file.getName()); - ossClient.putObject( - // 存储桶名称 - aliyunConfig.getBucketName(), - //对象键(Object Key),即文件在 OSS 中的完整路径和名称 - fileName, - //文件内容的输入流,用于读取待上传的文件数据。 - file.getInputStream(), - //文件的元数据信息,如内容类型(Content-Type)、缓存策略、文件大小等。 - null - ); - return fileName; - } catch (Exception e) { - logger.info("文件上传失败:{}", e.getMessage()); - throw new ServiceException(ServiceException.UPLOADING_FILE_FAIL, "上传文件失败:" + e.getMessage()); - } - } - - public ResponseEntity downloadFile(String fileName) { - try { - // 读取文件流 - InputStream inputStream = read(fileName); - - // 处理文件名编码(防止中文乱码) - String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8) - .replaceAll("\\+", "%20"); - - // 设置响应头 - HttpHeaders headers = new HttpHeaders(); - headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + encodedFileName); - headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); - headers.setCacheControl("no-cache, no-store, must-revalidate"); - - return ResponseEntity.ok() - .headers(headers) - .body(new InputStreamResource(inputStream)); - } catch (Exception e) { - logger.error("下载失败:{}", e.getMessage()); - throw new ServiceException(ServiceException.DOWNLOAD_FILE_FAIL, "下载失败: " + e.getMessage()); - } - } - - public void deleteFile(String fileName) { - try { - if (fileName == null || fileName.isEmpty()) { - throw new ServiceException(ServiceException.FILENAME_NULL, "文件名不能为空"); - } - - // 调用 OSS 客户端删除文件 - ossClient.deleteObject(aliyunConfig.getBucketName(), fileName); - logger.info("文件删除成功: {}", fileName); - } catch (Exception e) { - logger.error("删除文件失败: {}", e.getMessage()); - throw new ServiceException(ServiceException.DELETE_FILE_FAIL, "删除文件失败: " + e.getMessage()); - } - } - - public InputStream read(String fileName) { - try { - if (fileName == null || fileName.isEmpty()) { - throw new ServiceException(ServiceException.FILENAME_NULL, "文件名不能为空"); - } - OSSObject ossObject = ossClient.getObject(aliyunConfig.getBucketName(), fileName); - return ossObject.getObjectContent(); - } catch (Exception e) { - logger.error("读取文件失败:{}", e.getMessage()); - throw new ServiceException(ServiceException.READ_FILE_FAIL, "读取文件失败: " + e.getMessage()); - } - } - - // 生成带时间戳的唯一文件名 - private String generateUniqueFileName(String originalFileName) { - String timestamp = String.valueOf(System.currentTimeMillis()); - String ext = originalFileName.substring(originalFileName.lastIndexOf(".")); - return timestamp + ext; - } - -} diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/AliYunOssClient.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/AliYunOssClient.java new file mode 100644 index 00000000..fff03244 --- /dev/null +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/AliYunOssClient.java @@ -0,0 +1,12 @@ +package cd.casic.module.machine.utils; + +import cd.casic.module.infra.framework.file.core.client.s3.S3FileClient; +import cd.casic.module.infra.framework.file.core.client.s3.S3FileClientConfig; + + +public class AliYunOssClient extends S3FileClient{ + public AliYunOssClient(Long id, S3FileClientConfig config) { + super(id, config); + } + +}