[考勤对接]获取元数据信息优化

This commit is contained in:
xudawei 2024-07-21 23:02:37 +08:00
parent 73b73087bb
commit 0db846dc85
6 changed files with 112 additions and 26 deletions

View File

@ -30,6 +30,7 @@ import cn.axzo.oss.http.model.ServerFileUploadResponse;
import cn.axzo.oss.http.model.ServerFileUploadV2Request; import cn.axzo.oss.http.model.ServerFileUploadV2Request;
import cn.axzo.oss.manager.api.dto.request.FindFileKeyDto; 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.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.ServerFileDeleteDto;
import cn.axzo.oss.manager.api.dto.request.ServerFileUploadByUrlDto; import cn.axzo.oss.manager.api.dto.request.ServerFileUploadByUrlDto;
import cn.axzo.oss.manager.api.dto.request.ServerFileUploadDto; import cn.axzo.oss.manager.api.dto.request.ServerFileUploadDto;
@ -163,32 +164,8 @@ public class ServerFileController implements ServerFileServiceApi {
*/ */
@Override @Override
public CommonResponse<GetObjectMetaResponse> getObjectMeta(@RequestBody GetObjectMetaRequest request) { public CommonResponse<GetObjectMetaResponse> getObjectMeta(@RequestBody GetObjectMetaRequest request) {
if (!StringUtils.hasText(request.getUrl()) && !StringUtils.hasText(request.getBucketName()) && !StringUtils.hasText(request.getKey())) { GetObjectMetaDto dto = BeanConvertUtil.copyBean(request, GetObjectMetaDto.class);
throw new BizException(CodeEnum.URL_BUCKET_NAME_KEY_ALL_EMPTY); return CommonResponse.success(BeanConverter.convert(this.fileService.getObjectMeta(dto), GetObjectMetaResponse.class));
}
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;
} }
/** /**

View File

@ -39,6 +39,9 @@ public class UrlUtil {
if (org.springframework.util.StringUtils.hasText(bucketName)) { if (org.springframework.util.StringUtils.hasText(bucketName)) {
return bucketName; return bucketName;
} }
if (url.contains("?")) {
url = url.split("\\?")[0];
}
if (org.springframework.util.StringUtils.hasText(url)) { if (org.springframework.util.StringUtils.hasText(url)) {
if (url.contains(".") && url.contains("//")) { if (url.contains(".") && url.contains("//")) {
return url.substring(url.indexOf("//") + 2,url.indexOf(".")); return url.substring(url.indexOf("//") + 2,url.indexOf("."));

View File

@ -31,4 +31,8 @@ public class GetObjectMetaRequest {
* 唯一标识 * 唯一标识
*/ */
private String id; private String id;
/**
* 文件对象key
*/
private String fileKey;
} }

View File

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

View File

@ -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.DeleteFileDto;
import cn.axzo.oss.manager.api.dto.request.FindFileKeyDto; 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.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.MultipartUploadCompleteDto;
import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto; import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto;
import cn.axzo.oss.manager.api.dto.request.MultipartUploadFileDto; 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.ServerFileUploadResponse;
import cn.axzo.oss.manager.api.dto.response.SignUrlDownloadResponse; import cn.axzo.oss.manager.api.dto.response.SignUrlDownloadResponse;
import cn.axzo.oss.manager.api.dto.response.SignUrlUploadResponse; import cn.axzo.oss.manager.api.dto.response.SignUrlUploadResponse;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
@ -93,6 +95,11 @@ public interface FileService {
*/ */
ManaGetObjectMetaResponse getObjectMeta(String bucketName, String key, String url,String channelCode); ManaGetObjectMetaResponse getObjectMeta(String bucketName, String key, String url,String channelCode);
/**
* 文件元数据信息
*/
ManaGetObjectMetaResponse getObjectMeta(@RequestBody GetObjectMetaDto dto);
/** /**
* 授权给第三方下载 * 授权给第三方下载
*/ */

View File

@ -1,5 +1,6 @@
package cn.axzo.oss.service.impl; package cn.axzo.oss.service.impl;
import cn.axzo.core.utils.converter.BeanConverter;
import cn.axzo.framework.auth.domain.ContextInfo; import cn.axzo.framework.auth.domain.ContextInfo;
import cn.axzo.log.platform.client.LogPlatClient; import cn.axzo.log.platform.client.LogPlatClient;
import cn.axzo.log.platform.client.model.OperateLogReq; 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.DeleteFileDto;
import cn.axzo.oss.manager.api.dto.request.FindFileKeyDto; 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.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.MultipartUploadCompleteDto;
import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto; import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto;
import cn.axzo.oss.manager.api.dto.request.MultipartUploadFileDto; 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.api.FileService;
import cn.axzo.oss.service.metafile.WithFileFactory; import cn.axzo.oss.service.metafile.WithFileFactory;
import cn.axzo.oss.service.metafile.WithFileService; import cn.axzo.oss.service.metafile.WithFileService;
import cn.azxo.framework.common.model.CommonResponse;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; 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.core.env.Environment;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
@ -1110,6 +1114,59 @@ public class FileServiceImpl implements FileService {
fileManager.deleteFile(file.getBucketName(), tgtFileKey,file.getChannelCode()); fileManager.deleteFile(file.getBucketName(), tgtFileKey,file.getChannelCode());
fileDao.deleteFile(dto.getFileKey()); 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;
}
/** /**
* 元数据 * 元数据
*/ */