diff --git a/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java b/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java index 59da987..cf2fcf5 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java @@ -180,4 +180,29 @@ public class WebFileController { outputStream.close(); } } + + @SneakyThrows + @PostMapping(value = "/v1/file2", consumes = MULTIPART_FORM_DATA_VALUE) + @CrossOrigin + public CommonResponse uploadObs(@Valid @RequestParam("appCode") String appCode, + @Valid @RequestParam("bizScene") String bizScene, + @Valid @RequestPart MultipartFile file) { + // 获取用户信息 + ContextInfo.LiteSaasContext liteSaasContext = null; + ContextInfo contextInfo = ContextInfoHolder.get(); + if (contextInfo != null) { + liteSaasContext = contextInfo.lite(); + } + String filename = file.getOriginalFilename(); + BizException.error(filename.length() < FILE_NAME_MAX_LENGTH, FILE_NAME_TOO_LONG); + ServerFileUploadDto fileUploadDto = ServerFileUploadDto.builder() + .appCode(appCode) + .bizScene(bizScene) + .fileName(filename) + .fileContent(file.getBytes()) + .build(); + ServerFileUploadResponse response = fileService.uploadObs(fileUploadDto, liteSaasContext); + WebFileUploadVo result = BeanConvertUtil.copyBean(response, WebFileUploadVo.class); + return CommonResponse.success(result); + } } diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/config/HuaWeiCloudObsConfig.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/config/HuaWeiCloudObsConfig.java new file mode 100644 index 0000000..a590375 --- /dev/null +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/config/HuaWeiCloudObsConfig.java @@ -0,0 +1,29 @@ +package cn.axzo.oss.integration.s3.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.stereotype.Component; + +/** + * 华为云对象存储服务OBS配置 + * + * @author hucf + * @since 2024/1/12 15:11 + **/ +@RefreshScope +@Component +@Data +public class HuaWeiCloudObsConfig { + @Value("${huaweicloud.obs.accessKeyId}") + private String accessKeyId; + + @Value("${huaweicloud.obs.secretAccessKey") + private String secretAccessKey; + + @Value("${huaweicloud.obs.endPoint}") + private String endPoint; + + @Value("${huaweicloud.obs.bucket}") + private String bucket; +} diff --git a/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java b/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java index 4d7c68f..6dc5531 100644 --- a/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java +++ b/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java @@ -45,4 +45,6 @@ public interface FileService { FileInformationResponse multipartUploadComplete(MultipartUploadCompleteDto dto); FileInformationResponse multipartUploadFile(MultipartUploadFileDto dto); + + ServerFileUploadResponse uploadObs(ServerFileUploadDto dto, ContextInfo.LiteSaasContext liteSaasContext); } diff --git a/oss-service/pom.xml b/oss-service/pom.xml index 9a60c8f..ed085cf 100644 --- a/oss-service/pom.xml +++ b/oss-service/pom.xml @@ -22,6 +22,10 @@ cn.axzo.oss oss-manager + + com.huaweicloud + esdk-obs-java-bundle + diff --git a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java index e927bde..ae647fc 100644 --- a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java +++ b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java @@ -15,6 +15,7 @@ import cn.axzo.oss.common.utils.Utility; import cn.axzo.oss.dal.entity.*; import cn.axzo.oss.dal.repository.FileAppDao; import cn.axzo.oss.dal.repository.FileDao; +import cn.axzo.oss.integration.s3.config.HuaWeiCloudObsConfig; import cn.axzo.oss.manager.api.AppChannelBucketManager; import cn.axzo.oss.manager.api.FileBusinessSceneManager; import cn.axzo.oss.manager.api.FileManager; @@ -24,13 +25,17 @@ import cn.axzo.oss.manager.api.dto.request.*; import cn.axzo.oss.manager.api.dto.response.*; import cn.axzo.oss.service.api.FileService; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.json.JSONUtil; import com.google.common.collect.Lists; +import com.obs.services.ObsClient; +import com.obs.services.model.PutObjectResult; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -77,6 +82,9 @@ public class FileServiceImpl implements FileService { @Autowired private LogPlatClient logPlatClient; + @Autowired + private HuaWeiCloudObsConfig huaWeiCloudObsConfig; + /** * 删除文件 * @@ -613,4 +621,23 @@ public class FileServiceImpl implements FileService { return resp; } + @Override + public ServerFileUploadResponse uploadObs(ServerFileUploadDto dto, ContextInfo.LiteSaasContext liteSaasContext) { + + String accessKeyId = huaWeiCloudObsConfig.getAccessKeyId(); + String secretAccessKey = huaWeiCloudObsConfig.getSecretAccessKey(); + String endPoint = huaWeiCloudObsConfig.getEndPoint(); + String bucket = huaWeiCloudObsConfig.getBucket(); + ObsClient obsClient = new ObsClient(accessKeyId, secretAccessKey, endPoint); + InputStream inputStream = new ByteArrayInputStream(dto.getFileContent()); + String objectKey = Utility.getUUID(); + PutObjectResult putObjectResult = obsClient.putObject(bucket, objectKey, inputStream); + log.info("测试上传文件到华为云:{}", JSONUtil.toJsonStr(putObjectResult)); + + File ossFile = uploadFileAndGetFile(dto); + //操作日志记录 + operateLog(dto.toString(), "", FILE_UPLOAD_CODE, FILE_UPLOAD_NAME, liteSaasContext); + return setResponse(ossFile); + } + } diff --git a/pom.xml b/pom.xml index 97760d7..9a94173 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ 2.0.0-SNAPSHOT 3.10.2 1.0.0-SNAPSHOT + 3.23.3 @@ -101,6 +102,11 @@ axzo-log-api ${axzo-log-api.version} + + com.huaweicloud + esdk-obs-java-bundle + ${huaiweicloud-obs.versiion} +