From 61111b04da485e4334a0a69bf7c8280103f86e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E6=9C=9D=E9=A3=9E?= Date: Mon, 15 Jan 2024 15:02:03 +0800 Subject: [PATCH] =?UTF-8?q?add(req-2080):=E4=B8=8A=E4=BC=A0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=88=B0=E5=8D=8E=E4=B8=BA=E4=BA=91--=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=95=B4=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/controller/WebFileController.java | 12 ++-- oss-client/src/main/resources/bootstrap.yml | 4 +- .../cn/axzo/oss/common/enums/CodeEnum.java | 4 +- .../axzo/oss/common/enums/FileUploadType.java | 39 ++++++++++ .../dal/repository/AppChannelBucketDao.java | 2 +- .../impl/AppChannelBucketDaoImpl.java | 7 +- oss-integration/pom.xml | 4 ++ .../integration/s3/HuaWeiCloudService.java | 13 ++++ .../s3/client/HuaWeiCloudObsClient.java | 60 ++++++++++++++++ .../s3/config/HuaWeiCloudObsConfig.java | 4 +- .../s3/impl/HuaWeiCloudServiceImpl.java | 67 +++++++++++++++++ .../manager/api/AppChannelBucketManager.java | 2 +- .../cn/axzo/oss/manager/api/FileManager.java | 3 +- .../impl/AppChannelBucketManagerImpl.java | 4 +- .../oss/manager/impl/FileManagerImpl.java | 16 +++-- .../cn/axzo/oss/service/api/FileService.java | 8 +-- .../oss/service/impl/FileServiceImpl.java | 71 +++++++++---------- 17 files changed, 258 insertions(+), 62 deletions(-) create mode 100644 oss-common/src/main/java/cn/axzo/oss/common/enums/FileUploadType.java create mode 100644 oss-integration/src/main/java/cn/axzo/oss/integration/s3/HuaWeiCloudService.java create mode 100644 oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/HuaWeiCloudObsClient.java create mode 100644 oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/HuaWeiCloudServiceImpl.java 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 cf2fcf5..b610c98 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 @@ -5,6 +5,7 @@ import cn.axzo.framework.auth.annotation.PreBuildContext; import cn.axzo.framework.auth.domain.ContextInfo; import cn.axzo.framework.auth.domain.ContextInfoHolder; import cn.axzo.oss.client.vo.*; +import cn.axzo.oss.common.enums.FileUploadType; import cn.axzo.oss.common.exception.BizException; import cn.axzo.oss.common.utils.BeanConvertUtil; import cn.axzo.oss.manager.api.dto.request.*; @@ -95,8 +96,9 @@ public class WebFileController { @SneakyThrows @PostMapping("/v1/multipart-upload/init") @CrossOrigin - public CommonResponse multipartUploadInit(@Valid @RequestBody MultipartUploadInitDto dto) { - MultipartUploadInitResponse response = fileService.multipartUploadInit(dto); + public CommonResponse multipartUploadInit(@Valid @RequestBody MultipartUploadInitDto dto, + Integer fileUploadType) { + MultipartUploadInitResponse response = fileService.multipartUploadInit(dto, fileUploadType); return CommonResponse.success(BeanConvertUtil.copyBean(response, MultipartUploadInitVo.class)); } @@ -121,7 +123,7 @@ public class WebFileController { .partSize(partSize) .uploadId(uploadId) .build(); - MultipartUploadResponse response = fileService.multipartUpload(dto); + MultipartUploadResponse response = fileService.multipartUpload(dto, FileUploadType.OSS.getCode()); return CommonResponse.success(BeanConvertUtil.copyBean(response, MultipartUploadVo.class)); } @@ -138,7 +140,7 @@ public class WebFileController { .fileName(fileName) .file(file) .build(); - FileInformationResponse response = fileService.multipartUploadFile(dto); + FileInformationResponse response = fileService.multipartUploadFile(dto, FileUploadType.OSS.getCode()); return CommonResponse.success(BeanConvertUtil.copyBean(response, FileInformationVo.class)); } @@ -147,7 +149,7 @@ public class WebFileController { @SneakyThrows //@PreBuildContext public CommonResponse multipartUploadComplete(@Valid @RequestBody MultipartUploadCompleteDto dto) { - FileInformationResponse response = fileService.multipartUploadComplete(dto); + FileInformationResponse response = fileService.multipartUploadComplete(dto, FileUploadType.OSS.getCode()); return CommonResponse.success(BeanConvertUtil.copyBean(response, FileInformationVo.class)); } diff --git a/oss-client/src/main/resources/bootstrap.yml b/oss-client/src/main/resources/bootstrap.yml index 579e4c7..5251b47 100644 --- a/oss-client/src/main/resources/bootstrap.yml +++ b/oss-client/src/main/resources/bootstrap.yml @@ -4,12 +4,12 @@ spring: cloud: nacos: config: - server-addr: ${NACOS_HOST:dev-nacos.axzo.cn}:${NACOS_PORT:80} + server-addr: ${NACOS_HOST:dev-nacos.axzo.cn}:${NACOS_PORT:443} file-extension: yaml namespace: ${NACOS_NAMESPACE_ID:35eada10-9574-4db8-9fea-bc6a4960b6c7} prefix: ${spring.application.name} profiles: - active: ${NACOS_PROFILES_ACTIVE:local} + active: ${NACOS_PROFILES_ACTIVE:dev} main: allow-bean-definition-overriding: true diff --git a/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java b/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java index 61684f2..de31a77 100644 --- a/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java +++ b/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java @@ -46,7 +46,9 @@ public enum CodeEnum implements EnumBase { FILE_NOT_FOUND(112, "文件不存在"), MULTIPART_UPLOAD_INIT_ERROR(113, "文件类型初始化失败"), MULTIPART_UPLOAD_ERROR(114, "文件上传失败"), - MULTIPART_UPLOAD_COMPLETE_ERROR(115, "文件上传失败") + MULTIPART_UPLOAD_COMPLETE_ERROR(115, "文件上传失败"), + + OBS_CLIENT_NULL(116,"obs client为空"), ; diff --git a/oss-common/src/main/java/cn/axzo/oss/common/enums/FileUploadType.java b/oss-common/src/main/java/cn/axzo/oss/common/enums/FileUploadType.java new file mode 100644 index 0000000..d7def9f --- /dev/null +++ b/oss-common/src/main/java/cn/axzo/oss/common/enums/FileUploadType.java @@ -0,0 +1,39 @@ +package cn.axzo.oss.common.enums; + +import lombok.Getter; + +/** + * 文件上传方式枚举类 + * + * @author hucf + * @since 2024/1/15 10:15 + **/ +@Getter +public enum FileUploadType { + OSS(1, "阿里云", "aliyun"), + OBS(2, "华为云", "huaweicloud"), + ; + + private final Integer code; + + private final String message; + + private final String channelCode; + + FileUploadType(Integer code, String message, String channelCode) { + this.code = code; + this.message = message; + this.channelCode = channelCode; + } + + public static String getChannelCodeByCode(Integer code) { + String channelCode = null; + for (FileUploadType value : FileUploadType.values()) { + if (value.getCode().equals(code)) { + channelCode = value.getChannelCode(); + break; + } + } + return channelCode; + } +} diff --git a/oss-dal/src/main/java/cn/axzo/oss/dal/repository/AppChannelBucketDao.java b/oss-dal/src/main/java/cn/axzo/oss/dal/repository/AppChannelBucketDao.java index 1319b72..a89c1bd 100644 --- a/oss-dal/src/main/java/cn/axzo/oss/dal/repository/AppChannelBucketDao.java +++ b/oss-dal/src/main/java/cn/axzo/oss/dal/repository/AppChannelBucketDao.java @@ -20,5 +20,5 @@ public interface AppChannelBucketDao extends IService { * @param appCode appcode * @return */ - List getByAppCode(String appCode); + List getByAppCode(String appCode, Integer fileUploadType); } diff --git a/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/AppChannelBucketDaoImpl.java b/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/AppChannelBucketDaoImpl.java index 1f17e61..0a9bbde 100644 --- a/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/AppChannelBucketDaoImpl.java +++ b/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/AppChannelBucketDaoImpl.java @@ -1,11 +1,14 @@ package cn.axzo.oss.dal.repository.impl; +import cn.axzo.oss.common.enums.FileUploadType; import cn.axzo.oss.common.enums.IsDeleteEnum; import cn.axzo.oss.dal.entity.AppChannelBucket; import cn.axzo.oss.dal.mapper.AppChannelBucketMapper; import cn.axzo.oss.dal.repository.AppChannelBucketDao; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.List; +import java.util.Objects; + import org.springframework.stereotype.Repository; /** @@ -27,8 +30,10 @@ public class AppChannelBucketDaoImpl extends * @return */ @Override - public List getByAppCode(String appCode) { + public List getByAppCode(String appCode, Integer fileUploadType) { + String channelCodeByCode = FileUploadType.getChannelCodeByCode(fileUploadType); return lambdaQuery().eq(AppChannelBucket::getAppCode, appCode) + .eq(Objects.nonNull(channelCodeByCode), AppChannelBucket::getChannelCode, channelCodeByCode) .eq(AppChannelBucket::getIsDelete, IsDeleteEnum.NO.getCode()).list(); } } diff --git a/oss-integration/pom.xml b/oss-integration/pom.xml index 7f7d8e9..61720a4 100644 --- a/oss-integration/pom.xml +++ b/oss-integration/pom.xml @@ -25,6 +25,10 @@ com.aliyun.oss aliyun-sdk-oss + + com.huaweicloud + esdk-obs-java-bundle + diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/HuaWeiCloudService.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/HuaWeiCloudService.java new file mode 100644 index 0000000..69f6b0f --- /dev/null +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/HuaWeiCloudService.java @@ -0,0 +1,13 @@ +package cn.axzo.oss.integration.s3; + +import java.io.InputStream; + +/** + * 华为云obs + * + * @author hucf + * @since 2024/1/15 11:37 + **/ +public interface HuaWeiCloudService { + String uploadByStream(String bucketName, String tgtFileKey, String fileName, String appCode, InputStream srcStream); +} diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/HuaWeiCloudObsClient.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/HuaWeiCloudObsClient.java new file mode 100644 index 0000000..476e3a0 --- /dev/null +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/HuaWeiCloudObsClient.java @@ -0,0 +1,60 @@ +package cn.axzo.oss.integration.s3.client; + +import cn.axzo.oss.common.enums.CodeEnum; +import cn.axzo.oss.common.exception.S3Exception; +import cn.axzo.oss.common.utils.Utility; +import cn.axzo.oss.integration.s3.base.OssClientBase; +import cn.axzo.oss.integration.s3.config.HuaWeiCloudObsConfig; +import cn.azxo.framework.common.utils.LogUtil; +import com.obs.services.ObsClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 华为云obs客户端 + * + * @author hucf + * @since 2024/1/15 09:59 + **/ +@Component +@Slf4j +public class HuaWeiCloudObsClient implements OssClientBase { + + private volatile ObsClient instance = null; + + @Autowired + private HuaWeiCloudObsConfig huaWeiCloudObsConfig; + + @Override + public ObsClient getClient() { + if (Utility.objIsNull(instance)){ + throw new S3Exception(CodeEnum.OBS_CLIENT_NULL.getCode(),"oss客户端未初始化"); + } + return instance; + } + + @PostConstruct + @Override + public void initClient() { + log.info("initClient endpoint = {}, accessKeyId = {},secretAccessKey = {}", huaWeiCloudObsConfig.getEndPoint(), + huaWeiCloudObsConfig.getAccessKeyId(), huaWeiCloudObsConfig.getSecretAccessKey()); + try { + instance = new ObsClient( + huaWeiCloudObsConfig.getAccessKeyId(), + huaWeiCloudObsConfig.getSecretAccessKey(), + huaWeiCloudObsConfig.getEndPoint() + ); + } catch (Exception exception) { + instance = null; + LogUtil.error("initClient error = {}", exception); + } + } + + @Override + public String getEndpoint() { + return huaWeiCloudObsConfig.getEndPoint(); + } +} 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 index a590375..d66f114 100644 --- 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 @@ -18,10 +18,10 @@ public class HuaWeiCloudObsConfig { @Value("${huaweicloud.obs.accessKeyId}") private String accessKeyId; - @Value("${huaweicloud.obs.secretAccessKey") + @Value("${huaweicloud.obs.secretAccessKey}") private String secretAccessKey; - @Value("${huaweicloud.obs.endPoint}") + @Value("${huaweicloud.obs.secretAccessKey}") private String endPoint; @Value("${huaweicloud.obs.bucket}") diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/HuaWeiCloudServiceImpl.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/HuaWeiCloudServiceImpl.java new file mode 100644 index 0000000..05b3acd --- /dev/null +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/HuaWeiCloudServiceImpl.java @@ -0,0 +1,67 @@ +package cn.axzo.oss.integration.s3.impl; + +import cn.axzo.oss.integration.s3.HuaWeiCloudService; +import cn.axzo.oss.integration.s3.client.HuaWeiCloudObsClient; +import cn.azxo.framework.common.utils.LogUtil; +import cn.hutool.json.JSONUtil; +import com.aliyun.oss.OSSException; +import com.aliyun.oss.model.ObjectMetadata; +import com.obs.services.ObsClient; +import com.obs.services.model.PutObjectResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.InputStream; +import java.net.URLEncoder; + +/** + * 华为云OBS + * + * @author hucf + * @since 2024/1/15 11:41 + **/ +@Service +@Slf4j +public class HuaWeiCloudServiceImpl implements HuaWeiCloudService { + private static final String APPCODE_CMS = "cms"; + + @Autowired + private HuaWeiCloudObsClient huaWeiCloudObsClient; + + @Override + public String uploadByStream(String bucketName, String tgtFileKey, String fileName, String appCode, InputStream srcStream) { + ObsClient obsClient = huaWeiCloudObsClient.getClient(); + try { + if (APPCODE_CMS.equals(appCode)) { + PutObjectResult putObjectResult = obsClient.putObject(bucketName, fileName, srcStream); + } else { + // 创建上传文件的元信息,通过文件云信息设置HTTP Header + ObjectMetadata metadata = new ObjectMetadata(); + // 设置内容被下载时的名称 + metadata.setContentDisposition("attachment;filename=\"" + URLEncoder.encode(fileName, "utf-8") + "\""); + metadata.setContentEncoding("utf-8"); + PutObjectResult putObjectResult = obsClient.putObject(bucketName, fileName, srcStream); + } + } catch (OSSException e) { + LogUtil.error("uploadByStream OSSException", e); + return ""; + } catch (Exception e) { + LogUtil.error("uploadByStream ClientException", e); + return ""; + } + + return getUrl(bucketName, tgtFileKey); + } + + private String getUrl(String bucketName, String tgtFileKey) { + StringBuilder allBuilder = new StringBuilder(); + allBuilder.append("https://"); + allBuilder.append(bucketName); + allBuilder.append("."); + allBuilder.append(huaWeiCloudObsClient.getEndpoint()); + allBuilder.append(tgtFileKey); + + return allBuilder.toString(); + } +} diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/AppChannelBucketManager.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/AppChannelBucketManager.java index 00d1b7b..4012758 100644 --- a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/AppChannelBucketManager.java +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/AppChannelBucketManager.java @@ -16,5 +16,5 @@ public interface AppChannelBucketManager { * @param appCode appcode * @return */ - AppChannelBucket getByAppCode(String appCode); + AppChannelBucket getByAppCode(String appCode, Integer fileUploadType); } diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java index 3aed93f..e411e13 100644 --- a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java @@ -33,7 +33,8 @@ public interface FileManager { * @param fileContent * @return */ - String uploadByStream(String bulkName, String keyPath, String fileName, String appCode, byte[] fileContent); + String uploadByStream(String bulkName, String keyPath, String fileName, String appCode, byte[] fileContent, + Integer fileUploadType); /** * 下载文件 diff --git a/oss-manager/src/main/java/cn/axzo/oss/manager/impl/AppChannelBucketManagerImpl.java b/oss-manager/src/main/java/cn/axzo/oss/manager/impl/AppChannelBucketManagerImpl.java index 0e2b155..63c00f9 100644 --- a/oss-manager/src/main/java/cn/axzo/oss/manager/impl/AppChannelBucketManagerImpl.java +++ b/oss-manager/src/main/java/cn/axzo/oss/manager/impl/AppChannelBucketManagerImpl.java @@ -34,8 +34,8 @@ public class AppChannelBucketManagerImpl implements AppChannelBucketManager { * @return */ @Override - public AppChannelBucket getByAppCode(String appCode) { - List appChannelBuckets = appChannelBucketDao.getByAppCode(appCode); + public AppChannelBucket getByAppCode(String appCode, Integer fileUploadType) { + List appChannelBuckets = appChannelBucketDao.getByAppCode(appCode, fileUploadType); BizException.isEmpty(appChannelBuckets, CodeEnum.APP_CHANNEL_BUCKET_NOT_FOUND); // 找到最优渠道 diff --git a/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java b/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java index d391238..239127c 100644 --- a/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java +++ b/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java @@ -1,11 +1,12 @@ package cn.axzo.oss.manager.impl; +import cn.axzo.oss.common.enums.FileUploadType; import cn.axzo.oss.common.utils.BeanConvertUtil; import cn.axzo.oss.integration.s3.AliOssService; +import cn.axzo.oss.integration.s3.HuaWeiCloudService; import cn.axzo.oss.manager.api.FileManager; import cn.axzo.oss.manager.api.dto.PartETag; import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto; -import cn.axzo.oss.manager.api.dto.request.MultipartUploadFileDto; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -30,6 +31,9 @@ public class FileManagerImpl implements FileManager { @Autowired private AliOssService aliOssService; + @Autowired + private HuaWeiCloudService huaWeiCloudService; + /** * 删除文件 * @@ -46,11 +50,15 @@ public class FileManagerImpl implements FileManager { * @param bulkName 默认的取值为 * @param keyPath key的前置路径 */ - public String uploadByStream(String bulkName, String keyPath, String fileName, String appCode, byte[] fileContent) { + public String uploadByStream(String bulkName, String keyPath, String fileName, String appCode, byte[] fileContent, + Integer fileUploadType) { InputStream inputStream = new ByteArrayInputStream(fileContent); - - return aliOssService.uploadByStream(bulkName, keyPath, fileName, appCode, inputStream); + if (fileUploadType.equals(FileUploadType.OBS.getCode())) { + return huaWeiCloudService.uploadByStream(bulkName, keyPath, fileName, appCode, inputStream); + } else { + return aliOssService.uploadByStream(bulkName, keyPath, fileName, appCode, inputStream); + } } @Override 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 6dc5531..bb9d99f 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 @@ -38,13 +38,13 @@ public interface FileService { ServerFileDownloadResponse download(ServerFileDownloadDto dto); - MultipartUploadInitResponse multipartUploadInit(MultipartUploadInitDto multipartUploadInitDto); + MultipartUploadInitResponse multipartUploadInit(MultipartUploadInitDto multipartUploadInitDto, Integer fileUploadType); - MultipartUploadResponse multipartUpload(MultipartUploadDto dto); + MultipartUploadResponse multipartUpload(MultipartUploadDto dto, Integer fileUploadType); - FileInformationResponse multipartUploadComplete(MultipartUploadCompleteDto dto); + FileInformationResponse multipartUploadComplete(MultipartUploadCompleteDto dto, Integer fileUploadType); - FileInformationResponse multipartUploadFile(MultipartUploadFileDto dto); + FileInformationResponse multipartUploadFile(MultipartUploadFileDto dto, Integer fileUploadType); ServerFileUploadResponse uploadObs(ServerFileUploadDto dto, ContextInfo.LiteSaasContext liteSaasContext); } 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 ae647fc..66ea491 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 @@ -9,6 +9,7 @@ import cn.axzo.oss.common.constans.CommonConstants.TableDelete; import cn.axzo.oss.common.enums.CodeEnum; import cn.axzo.oss.common.enums.FileClassEnum; import cn.axzo.oss.common.enums.FileStatusEnum; +import cn.axzo.oss.common.enums.FileUploadType; import cn.axzo.oss.common.exception.BizException; import cn.axzo.oss.common.utils.JsonUtil; import cn.axzo.oss.common.utils.Utility; @@ -144,7 +145,7 @@ public class FileServiceImpl implements FileService { */ @Override public ServerFileUploadResponse upload(ServerFileUploadDto dto, ContextInfo.LiteSaasContext liteSaasContext) { - File ossFile = uploadFileAndGetFile(dto); + File ossFile = uploadFileAndGetFile(dto, FileUploadType.OSS.getCode()); //操作日志记录 operateLog(dto.toString(), "", FILE_UPLOAD_CODE, FILE_UPLOAD_NAME, liteSaasContext); return setResponse(ossFile); @@ -152,15 +153,15 @@ public class FileServiceImpl implements FileService { @Override public FileInformationResponse uploadV2(String serviceName, ServerFileUploadDto request, ContextInfo.LiteSaasContext liteSaasContext) { - File ossFile = uploadFileAndGetFile(request); + File ossFile = uploadFileAndGetFile(request, FileUploadType.OSS.getCode()); //操作日志记录 operateLog(request.toString(), serviceName, FILE_UPLOAD_CODE, FILE_UPLOAD_NAME, liteSaasContext); return setFileInfoResp(ossFile); } @Override - public MultipartUploadInitResponse multipartUploadInit(MultipartUploadInitDto dto) { - FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene()); + public MultipartUploadInitResponse multipartUploadInit(MultipartUploadInitDto dto, Integer fileUploadType) { + FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene(), fileUploadType); // 判断容量 String fileConform = isFileConform(fileUploadConfig, 10, dto.getFileName()); String uuid = Utility.getUUID(); @@ -175,8 +176,8 @@ public class FileServiceImpl implements FileService { } @Override - public MultipartUploadResponse multipartUpload(MultipartUploadDto dto) { - FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene()); + public MultipartUploadResponse multipartUpload(MultipartUploadDto dto, Integer fileUploadType) { + FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene(), fileUploadType); // 判断容量 isFileConform(fileUploadConfig, dto.getFileContent().length, dto.getFileName()); @@ -190,13 +191,13 @@ public class FileServiceImpl implements FileService { } @Override - public FileInformationResponse multipartUploadFile(MultipartUploadFileDto dto) { - File ossFile = multipartUploadAndGetFile(dto); + public FileInformationResponse multipartUploadFile(MultipartUploadFileDto dto, Integer fileUploadType) { + File ossFile = multipartUploadAndGetFile(dto, fileUploadType); return setFileInfoResp(dto.getFile().getSize(), ossFile); } - private File multipartUploadAndGetFile(MultipartUploadFileDto dto) { - FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene()); + private File multipartUploadAndGetFile(MultipartUploadFileDto dto, Integer fileUploadType) { + FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene(), fileUploadType); // 判断容量 String fileConform = isFileConform(fileUploadConfig, (int) dto.getFile().getSize() / 10, dto.getFileName()); @@ -214,8 +215,8 @@ public class FileServiceImpl implements FileService { } @Override - public FileInformationResponse multipartUploadComplete(MultipartUploadCompleteDto dto) { - FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene()); + public FileInformationResponse multipartUploadComplete(MultipartUploadCompleteDto dto, Integer fileUploadType) { + FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene(), fileUploadType); // 文件合并并生成 file对象 File ossFile = completeFile(fileUploadConfig, dto.getFileName(), dto.getTgtFileKey(), dto.getUploadId(), dto.getPartETags()); @@ -249,12 +250,12 @@ public class FileServiceImpl implements FileService { return setFileDownloadResponse(file, fileStream); } - private FileUploadConfig getFileUploadConfig(String appCode, String bizScene) { + private FileUploadConfig getFileUploadConfig(String appCode, String bizScene, Integer fileUploadType) { // 检查appCode checkAppCode(appCode); // 通过appcode获取文件渠道桶信息 - AppChannelBucket appChannelBucket = appChannelBucketManager.getByAppCode(appCode); + AppChannelBucket appChannelBucket = appChannelBucketManager.getByAppCode(appCode, fileUploadType); // 通过渠道桶编码获取到具体文件业务场景 FileBusinessScene scene = fileBusinessSceneManager @@ -343,12 +344,12 @@ public class FileServiceImpl implements FileService { } } - private File uploadFileAndGetFile(ServerFileUploadDto dto) { - log.info("update fileName:{},appCode:{},bizScene:{}", + private File uploadFileAndGetFile(ServerFileUploadDto dto, Integer fileUploadType) { + log.info("update fileUploadType:{}, fileName:{},appCode:{},bizScene:{}", fileUploadType, dto.getFileName(), dto.getAppCode(), dto.getBizScene()); - FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene()); + FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene(), fileUploadType); // 上传文件并生成file对象 - return generateFile(fileUploadConfig, dto); + return generateFile(fileUploadConfig, dto, fileUploadType); } @Override @@ -487,7 +488,7 @@ public class FileServiceImpl implements FileService { throw new BizException(CodeEnum.APP_CODE_NOT_FOUND); } // 通过appcode获取文件渠道桶信息 - AppChannelBucket appChannelBucket = appChannelBucketManager.getByAppCode(appCode); + AppChannelBucket appChannelBucket = appChannelBucketManager.getByAppCode(appCode, FileUploadType.OSS.getCode()); // 通过渠道桶编码获取到具体文件业务场景 FileBusinessScene scene = fileBusinessSceneManager .getByBucketNoAndScene(appChannelBucket.getAppChannelBucketNo(), bizScene); @@ -571,19 +572,23 @@ public class FileServiceImpl implements FileService { return fileFormat; } - private File generateFile(FileUploadConfig fileUploadConfig, ServerFileUploadDto dto) { + private File generateFile(FileUploadConfig fileUploadConfig, ServerFileUploadDto dto, Integer fileUploadType) { // 判断容量 String fileConform = isFileConform(fileUploadConfig, dto.getFileContent().length, dto.getFileName()); + String fileUrl = null; String uuid = Utility.getUUID(); - - // 生成上传文件的唯一key - String tgtFileKey = Utility.generateFileKey(fileUploadConfig.getDirectory(), uuid, fileConform); - - // 上传文件 - String fileUrl = fileManager.uploadByStream(fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileName(), - dto.getAppCode(), dto.getFileContent()); + if (fileUploadType.equals(FileUploadType.OBS.getCode())) { + fileUrl = fileManager.uploadByStream(fileUploadConfig.getBucketName(), null, dto.getFileName(), + dto.getAppCode(), dto.getFileContent(), fileUploadType); + } else { + // 生成上传文件的唯一key + String tgtFileKey = Utility.generateFileKey(fileUploadConfig.getDirectory(), uuid, fileConform); + // 上传文件 + fileUrl = fileManager.uploadByStream(fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileName(), + dto.getAppCode(), dto.getFileContent(), fileUploadType); + } // 保存失败 if (Utility.isBlank(fileUrl)) { @@ -623,18 +628,8 @@ public class FileServiceImpl implements FileService { @Override public ServerFileUploadResponse uploadObs(ServerFileUploadDto dto, ContextInfo.LiteSaasContext liteSaasContext) { + File ossFile = uploadFileAndGetFile(dto, FileUploadType.OBS.getCode()); - 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);