diff --git a/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java b/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java index 4364829..58661fe 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java @@ -30,6 +30,7 @@ import cn.axzo.oss.http.model.ServerFileUploadResponse; import cn.axzo.oss.http.model.ServerFileUploadV2Request; import cn.axzo.oss.manager.api.dto.request.FindFileKeyDto; import cn.axzo.oss.manager.api.dto.request.FindFileUrlDto; +import cn.axzo.oss.manager.api.dto.request.GetObjectMetaDto; import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto; import cn.axzo.oss.manager.api.dto.request.ServerFileUploadByUrlDto; import cn.axzo.oss.manager.api.dto.request.ServerFileUploadDto; @@ -163,32 +164,8 @@ public class ServerFileController implements ServerFileServiceApi { */ @Override public CommonResponse getObjectMeta(@RequestBody GetObjectMetaRequest request) { - if (!StringUtils.hasText(request.getUrl()) && !StringUtils.hasText(request.getBucketName()) && !StringUtils.hasText(request.getKey())) { - throw new BizException(CodeEnum.URL_BUCKET_NAME_KEY_ALL_EMPTY); - } - - String bucketName = UrlUtil.fetchBucketName(request.getBucketName(), request.getUrl()); - String bucketKey = UrlUtil.fetchBucketKey(request.getKey(), request.getUrl()); - ManaGetObjectMetaResponse response = this.fileService.getObjectMeta(bucketName - , bucketKey, request.getUrl() - , this.swtchChannelCode(request.getUrl())); - return CommonResponse.success(BeanConverter.convert(response, GetObjectMetaResponse.class)); - } - - /** - * 决定渠道 - */ - private String swtchChannelCode(String url) { - if (!StringUtils.hasText(url)) { - return ""; - } - if (url.toLowerCase().contains("aliyun")) { - return ChannelTypeEnum.OSS.getChannelCode(); - } - if (url.toLowerCase().contains("huaweicloud")) { - return ChannelTypeEnum.OBS.getChannelCode(); - } - return url; + GetObjectMetaDto dto = BeanConvertUtil.copyBean(request, GetObjectMetaDto.class); + return CommonResponse.success(BeanConverter.convert(this.fileService.getObjectMeta(dto), GetObjectMetaResponse.class)); } /** diff --git a/oss-common/src/main/java/cn/axzo/oss/common/utils/UrlUtil.java b/oss-common/src/main/java/cn/axzo/oss/common/utils/UrlUtil.java index 5609600..f155473 100644 --- a/oss-common/src/main/java/cn/axzo/oss/common/utils/UrlUtil.java +++ b/oss-common/src/main/java/cn/axzo/oss/common/utils/UrlUtil.java @@ -39,6 +39,9 @@ public class UrlUtil { if (org.springframework.util.StringUtils.hasText(bucketName)) { return bucketName; } + if (url.contains("?")) { + url = url.split("\\?")[0]; + } if (org.springframework.util.StringUtils.hasText(url)) { if (url.contains(".") && url.contains("//")) { return url.substring(url.indexOf("//") + 2,url.indexOf(".")); diff --git a/oss-http-api/src/main/java/cn/axzo/oss/http/model/GetObjectMetaRequest.java b/oss-http-api/src/main/java/cn/axzo/oss/http/model/GetObjectMetaRequest.java index 3f5e951..0e06d41 100644 --- a/oss-http-api/src/main/java/cn/axzo/oss/http/model/GetObjectMetaRequest.java +++ b/oss-http-api/src/main/java/cn/axzo/oss/http/model/GetObjectMetaRequest.java @@ -31,4 +31,8 @@ public class GetObjectMetaRequest { * 唯一标识 */ private String id; + /** + * 文件对象key + */ + private String fileKey; } diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/GetObjectMetaDto.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/GetObjectMetaDto.java new file mode 100644 index 0000000..e86a17e --- /dev/null +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/GetObjectMetaDto.java @@ -0,0 +1,38 @@ +package cn.axzo.oss.manager.api.dto.request; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author: xudawei + * @date: 2024-07-16 + * @description: 元数据 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetObjectMetaDto { + /** + * 桶名称 + */ + private String bucketName; + /** + * 文件key + */ + private String key; + /** + * 文件url + */ + private String url; + /** + * 唯一标识 + */ + private String id; + /** + * 文件对象key + */ + private String fileKey; +} 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 c93e563..b885d7d 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 @@ -4,6 +4,7 @@ import cn.axzo.framework.auth.domain.ContextInfo; import cn.axzo.oss.manager.api.dto.request.DeleteFileDto; import cn.axzo.oss.manager.api.dto.request.FindFileKeyDto; import cn.axzo.oss.manager.api.dto.request.FindFileUrlDto; +import cn.axzo.oss.manager.api.dto.request.GetObjectMetaDto; import cn.axzo.oss.manager.api.dto.request.MultipartUploadCompleteDto; import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto; import cn.axzo.oss.manager.api.dto.request.MultipartUploadFileDto; @@ -23,6 +24,7 @@ import cn.axzo.oss.manager.api.dto.response.ServerFileDownloadResponse; import cn.axzo.oss.manager.api.dto.response.ServerFileUploadResponse; import cn.axzo.oss.manager.api.dto.response.SignUrlDownloadResponse; import cn.axzo.oss.manager.api.dto.response.SignUrlUploadResponse; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -93,6 +95,11 @@ public interface FileService { */ ManaGetObjectMetaResponse getObjectMeta(String bucketName, String key, String url,String channelCode); + /** + * 文件元数据信息 + */ + ManaGetObjectMetaResponse getObjectMeta(@RequestBody GetObjectMetaDto dto); + /** * 授权给第三方下载 */ 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 2c1ab07..9ddc1e8 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 @@ -1,5 +1,6 @@ package cn.axzo.oss.service.impl; +import cn.axzo.core.utils.converter.BeanConverter; import cn.axzo.framework.auth.domain.ContextInfo; import cn.axzo.log.platform.client.LogPlatClient; import cn.axzo.log.platform.client.model.OperateLogReq; @@ -33,6 +34,7 @@ import cn.axzo.oss.manager.api.dto.PartETag; import cn.axzo.oss.manager.api.dto.request.DeleteFileDto; import cn.axzo.oss.manager.api.dto.request.FindFileKeyDto; import cn.axzo.oss.manager.api.dto.request.FindFileUrlDto; +import cn.axzo.oss.manager.api.dto.request.GetObjectMetaDto; import cn.axzo.oss.manager.api.dto.request.MultipartUploadCompleteDto; import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto; import cn.axzo.oss.manager.api.dto.request.MultipartUploadFileDto; @@ -56,6 +58,7 @@ import cn.axzo.oss.manager.api.vo.SignUrlUploadVo; import cn.axzo.oss.service.api.FileService; import cn.axzo.oss.service.metafile.WithFileFactory; import cn.axzo.oss.service.metafile.WithFileService; +import cn.azxo.framework.common.model.CommonResponse; import cn.hutool.core.collection.CollectionUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -67,6 +70,7 @@ import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -1110,6 +1114,59 @@ public class FileServiceImpl implements FileService { fileManager.deleteFile(file.getBucketName(), tgtFileKey,file.getChannelCode()); fileDao.deleteFile(dto.getFileKey()); } + + + /** + * 文件元数据信息 + */ + @Override + public ManaGetObjectMetaResponse getObjectMeta(@RequestBody GetObjectMetaDto dto) { + if (!org.springframework.util.StringUtils.hasText(dto.getUrl()) && !org.springframework.util.StringUtils.hasText(dto.getBucketName()) + && !org.springframework.util.StringUtils.hasText(dto.getKey()) && !org.springframework.util.StringUtils.hasText(dto.getFileKey())) { + throw new BizException(CodeEnum.URL_BUCKET_NAME_KEY_ALL_EMPTY); + } + String bucketName = StringUtils.EMPTY; + String bucketKey = StringUtils.EMPTY; + String channelCode = StringUtils.EMPTY; + String url = StringUtils.EMPTY; + if (org.springframework.util.StringUtils.hasText(dto.getFileKey())) { + File byFileUuid = this.fileDao.getByFileUuid(dto.getFileKey()); + if (Objects.nonNull(byFileUuid)) { + bucketName = byFileUuid.getBucketName(); + bucketKey = Utility.generateFileKey(byFileUuid.getDirectory(), byFileUuid.getFileUuid(), byFileUuid.getFileFormat()); + channelCode = byFileUuid.getChannelCode(); + url = byFileUuid.getFileUrl(); + } + } + if (StringUtils.isBlank(bucketName) && StringUtils.isBlank(bucketKey)) { + bucketName = UrlUtil.fetchBucketName(dto.getBucketName(), dto.getUrl()); + bucketKey = UrlUtil.fetchBucketKey(dto.getKey(), dto.getUrl()); + channelCode = this.swtchChannelCode(dto.getUrl()); + url = dto.getUrl(); + } + + ManaGetObjectMetaResponse response = this.getObjectMeta(bucketName + , bucketKey, url + , channelCode); + return BeanConverter.convert(response, ManaGetObjectMetaResponse.class); + } + + /** + * 决定渠道 + */ + private String swtchChannelCode(String url) { + if (!org.springframework.util.StringUtils.hasText(url)) { + return ""; + } + if (url.toLowerCase().contains("aliyun")) { + return ChannelTypeEnum.OSS.getChannelCode(); + } + if (url.toLowerCase().contains("huaweicloud")) { + return ChannelTypeEnum.OBS.getChannelCode(); + } + return url; + } + /** * 元数据 */