add(req-2080):上传文件到华为云--代码整合

This commit is contained in:
胡朝飞 2024-01-15 15:02:03 +08:00
parent 9a9b5fce03
commit 61111b04da
17 changed files with 258 additions and 62 deletions

View File

@ -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<MultipartUploadInitVo> multipartUploadInit(@Valid @RequestBody MultipartUploadInitDto dto) {
MultipartUploadInitResponse response = fileService.multipartUploadInit(dto);
public CommonResponse<MultipartUploadInitVo> 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<FileInformationVo> 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));
}

View File

@ -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

View File

@ -46,7 +46,9 @@ public enum CodeEnum implements EnumBase<Integer> {
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为空"),
;

View File

@ -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;
}
}

View File

@ -20,5 +20,5 @@ public interface AppChannelBucketDao extends IService<AppChannelBucket> {
* @param appCode appcode
* @return
*/
List<AppChannelBucket> getByAppCode(String appCode);
List<AppChannelBucket> getByAppCode(String appCode, Integer fileUploadType);
}

View File

@ -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<AppChannelBucket> getByAppCode(String appCode) {
public List<AppChannelBucket> 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();
}
}

View File

@ -25,6 +25,10 @@
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<dependency>
<groupId>com.huaweicloud</groupId>
<artifactId>esdk-obs-java-bundle</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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}")

View File

@ -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();
}
}

View File

@ -16,5 +16,5 @@ public interface AppChannelBucketManager {
* @param appCode appcode
* @return
*/
AppChannelBucket getByAppCode(String appCode);
AppChannelBucket getByAppCode(String appCode, Integer fileUploadType);
}

View File

@ -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);
/**
* 下载文件

View File

@ -34,8 +34,8 @@ public class AppChannelBucketManagerImpl implements AppChannelBucketManager {
* @return
*/
@Override
public AppChannelBucket getByAppCode(String appCode) {
List<AppChannelBucket> appChannelBuckets = appChannelBucketDao.getByAppCode(appCode);
public AppChannelBucket getByAppCode(String appCode, Integer fileUploadType) {
List<AppChannelBucket> appChannelBuckets = appChannelBucketDao.getByAppCode(appCode, fileUploadType);
BizException.isEmpty(appChannelBuckets, CodeEnum.APP_CHANNEL_BUCKET_NOT_FOUND);
// 找到最优渠道

View File

@ -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,12 +50,16 @@ 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);
if (fileUploadType.equals(FileUploadType.OBS.getCode())) {
return huaWeiCloudService.uploadByStream(bulkName, keyPath, fileName, appCode, inputStream);
} else {
return aliOssService.uploadByStream(bulkName, keyPath, fileName, appCode, inputStream);
}
}
@Override
public InputStream downloadFile(String bucketName, String tgtFileKey, String style) {

View File

@ -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);
}

View File

@ -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();
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);
// 上传文件
String fileUrl = fileManager.uploadByStream(fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileName(),
dto.getAppCode(), dto.getFileContent());
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);