feat:(REQ-3540) 文件复制接口-优化

This commit is contained in:
xudawei 2025-03-11 11:45:16 +08:00
parent 10e746abd4
commit 503826f5ca
9 changed files with 46 additions and 28 deletions

View File

@ -233,7 +233,7 @@ public class ServerFileController implements ServerFileServiceApi {
/** /**
* 复制文件 * 复制文件
*/ */
public CommonResponse<ServerFileBatchCopyObjectResponse> batchCopyObject(ServerFileBatchCopyObjectRequest request) { public CommonResponse<ServerFileBatchCopyObjectResponse> batchCopyObject(@Valid @RequestBody ServerFileBatchCopyObjectRequest request) {
AssertUtil.isFalse(Objects.isNull(request) || CollectionUtils.isEmpty(request.getCopyObjects()), "入参为空"); AssertUtil.isFalse(Objects.isNull(request) || CollectionUtils.isEmpty(request.getCopyObjects()), "入参为空");
List<FileCopyObjectDto> fileCopyObjectDtos = BeanUtil.copyToList(request.getCopyObjects(), FileCopyObjectDto.class); List<FileCopyObjectDto> fileCopyObjectDtos = BeanUtil.copyToList(request.getCopyObjects(), FileCopyObjectDto.class);
List<FileCopyObjectResponse> fileCopyObjectResponses = fileService.batchCopyObject(fileCopyObjectDtos, request.getAppCode()); List<FileCopyObjectResponse> fileCopyObjectResponses = fileService.batchCopyObject(fileCopyObjectDtos, request.getAppCode());

View File

@ -141,6 +141,6 @@ public interface ServerFileServiceApi {
* 复制文件 * 复制文件
*/ */
@RequestMapping(value = "/api/server/batchCopyObject", method = RequestMethod.POST) @RequestMapping(value = "/api/server/batchCopyObject", method = RequestMethod.POST)
CommonResponse<ServerFileBatchCopyObjectResponse> batchCopyObject(ServerFileBatchCopyObjectRequest request); CommonResponse<ServerFileBatchCopyObjectResponse> batchCopyObject(@Valid @RequestBody ServerFileBatchCopyObjectRequest request);
} }

View File

@ -67,7 +67,7 @@ public class ServerFileBatchCopyObjectRequest {
*/ */
private String srcBucketName; private String srcBucketName;
/** /**
* 桶文件目录 * 桶文件路径(目录+文件)
*/ */
private String srcBucketKey; private String srcBucketKey;
/** /**

View File

@ -27,26 +27,39 @@ public class ServerFileBatchCopyObjectResponse {
@Builder @Builder
public static class ServerFileCopyObjectResponse { public static class ServerFileCopyObjectResponse {
/** /**
* 与入参中的id一致 * 唯一标识没有唯一标识可以与fileKey一致
*/ */
private String id; private String fileUuid;
/** /**
* 原文件的fileKey * 目标桶
* 如果目标桶为空,则默认取源桶
*/ */
private String oldFileKey; private String targetFileKey;
/** /**
* 原文件的url * 目标通道
* 如果目标通道为空,则默认源通道
*/ */
private String oldFileUrl; private String targetChannelCode;
/** /**
* 新文件的filekey * 桶名称
*/ */
private String newFileKey; private String srcBucketName;
/**
* 桶文件目录
*/
private String srcBucketDict;
/**
* 文件对象key
*/
private String srcFileKey;
private String newUrl; /**
* 文件名称
*/
private String srcFileName;
} }

View File

@ -42,6 +42,12 @@ public class CopyObjectCloudDto {
* 目的桶名称 * 目的桶名称
*/ */
private String targetBucketName; private String targetBucketName;
/**
* 目的桶目录
*/
private String targetBucketDict;
/** /**
* 目的桶key(三方的桶上的目录+文件名称) * 目的桶key(三方的桶上的目录+文件名称)
*/ */
@ -53,7 +59,7 @@ public class CopyObjectCloudDto {
private String targetKey; private String targetKey;
private String targetChannelCode; private String targetChannelCode;
private String fileName; private String targetFileName;
private File file; private File file;
private String fileUuid; private String fileUuid;
@ -72,10 +78,11 @@ public class CopyObjectCloudDto {
.srcBucketKey(Utility.generateFileKey(file.getDirectory(), file.getFileUuid(), file.getFileFormat())) .srcBucketKey(Utility.generateFileKey(file.getDirectory(), file.getFileUuid(), file.getFileFormat()))
.srcChannelCode(file.getChannelCode()) .srcChannelCode(file.getChannelCode())
.targetBucketName(targetBucketName) .targetBucketName(targetBucketName)
.targetBucketDict(targetBucketDict)
.targetBucketKey(Utility.generateFileKey(targetBucketDict, uuid, file.getFileFormat())) .targetBucketKey(Utility.generateFileKey(targetBucketDict, uuid, file.getFileFormat()))
.targetKey(uuid) .targetKey(uuid)
.targetChannelCode(targetChannelCode) .targetChannelCode(targetChannelCode)
.fileName(fileName) .targetFileName(fileName)
.file(file) .file(file)
.fileUuid(fileCopyObjectRequest.getFileUuid()) .fileUuid(fileCopyObjectRequest.getFileUuid())
.build(); .build();

View File

@ -5,9 +5,7 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
import java.util.List; import java.util.List;

View File

@ -40,20 +40,20 @@ public class FileCopyObjectResponse {
/** /**
* 桶名称 * 桶名称
*/ */
private String bucketName; private String srcBucketName;
/** /**
* 桶文件目录 * 桶文件目录
*/ */
private String bucketDict; private String srcBucketDict;
/** /**
* 文件对象key * 文件对象key
*/ */
private String fileKey; private String srcFileKey;
/** /**
* 文件名称 * 文件名称
*/ */
private String fileName; private String srcFileName;
public static FileCopyObjectResponse create(CopyObjectCloudDto item) { public static FileCopyObjectResponse create(CopyObjectCloudDto item) {
return FileCopyObjectResponse.builder() return FileCopyObjectResponse.builder()
@ -61,10 +61,10 @@ public class FileCopyObjectResponse {
.targetFileKey(item.getTargetKey()) .targetFileKey(item.getTargetKey())
.targetChannelCode(item.getTargetChannelCode()) .targetChannelCode(item.getTargetChannelCode())
// .targetDownloadUrl(this.fileManager.fetchDownloadUrl(item.getFile().getb)) // .targetDownloadUrl(this.fileManager.fetchDownloadUrl(item.getFile().getb))
.bucketName(item.getFile().getBucketName()) .srcBucketName(item.getFile().getBucketName())
.bucketDict(item.getFile().getDirectory()) .srcBucketDict(item.getFile().getDirectory())
.fileKey(item.getFile().getFileUuid()) .srcFileKey(item.getFile().getFileUuid())
.fileName(item.getFileName()) .srcFileName(item.getTargetFileName())
.build(); .build();
} }

View File

@ -357,7 +357,7 @@ public class FileManagerImpl implements FileManager {
return this.copyObjectWhenSameChannel(dto); return this.copyObjectWhenSameChannel(dto);
} }
// 不同的通道通过url上传至云(通过url复制至云) // 不同的通道通过url上传至云(通过url复制至云)
String url = this.uploadByUrl(dto.getTargetBucketName(), dto.getTargetKey(), dto.getFileName(), dto.getSrcUrl(), dto.getTargetChannelCode()); String url = this.uploadByUrl(dto.getTargetBucketName(), dto.getTargetKey(), dto.getTargetFileName(), dto.getSrcUrl(), dto.getTargetChannelCode());
return StringUtils.isBlank(url) ? false : true; return StringUtils.isBlank(url) ? false : true;
} }
@ -368,7 +368,7 @@ public class FileManagerImpl implements FileManager {
ChannelTypeEnum typeEnum = ChannelTypeEnum.getChannelTypeByChannelCode(dto.getSrcChannelCode()); ChannelTypeEnum typeEnum = ChannelTypeEnum.getChannelTypeByChannelCode(dto.getSrcChannelCode());
switch (typeEnum) { switch (typeEnum) {
case OBS:// 华为云 case OBS:// 华为云
CopyObjectResult huaweiResult = huaWeiCloudService.copyObject(dto.getSrcBucketName(), dto.getSrcBucketKey(), dto.getTargetBucketName(), dto.getTargetKey()); CopyObjectResult huaweiResult = huaWeiCloudService.copyObject(dto.getSrcBucketName(), dto.getSrcBucketKey(), dto.getTargetBucketName(), dto.getTargetBucketKey());
return Objects.isNull(huaweiResult) ? false : true; return Objects.isNull(huaweiResult) ? false : true;
case OSS:// 阿里云 case OSS:// 阿里云
com.aliyun.oss.model.CopyObjectResult aliResult = aliOssService.copyObject(dto.getSrcBucketName(), dto.getSrcBucketKey(), dto.getTargetBucketName(), dto.getTargetKey()); com.aliyun.oss.model.CopyObjectResult aliResult = aliOssService.copyObject(dto.getSrcBucketName(), dto.getSrcBucketKey(), dto.getTargetBucketName(), dto.getTargetKey());

View File

@ -1306,7 +1306,7 @@ public class FileServiceImpl implements FileService {
ossFile.setAppCode(item.getFile().getAppCode()); ossFile.setAppCode(item.getFile().getAppCode());
ossFile.setChannelCode(item.getTargetChannelCode()); ossFile.setChannelCode(item.getTargetChannelCode());
ossFile.setBucketName(item.getTargetBucketName()); ossFile.setBucketName(item.getTargetBucketName());
ossFile.setDirectory(item.getTargetBucketKey()); ossFile.setDirectory(item.getTargetBucketDict());
ossFile.setStorageUnit(item.getFile().getStorageUnit()); ossFile.setStorageUnit(item.getFile().getStorageUnit());
ossFile.setStorageSize(item.getFile().getStorageSize()); ossFile.setStorageSize(item.getFile().getStorageSize());
ossFile.setFileFormat(item.getFile().getFileFormat()); ossFile.setFileFormat(item.getFile().getFileFormat());
@ -1314,7 +1314,7 @@ public class FileServiceImpl implements FileService {
ossFile.setFileUrl(this.fileManager.fetchDownloadUrl(item.getTargetBucketName(), Utility.generateFileKey(item.getTargetBucketKey(), item.getTargetKey(), item.getFile().getFileFormat()), item.getTargetChannelCode())); ossFile.setFileUrl(this.fileManager.fetchDownloadUrl(item.getTargetBucketName(), Utility.generateFileKey(item.getTargetBucketKey(), item.getTargetKey(), item.getFile().getFileFormat()), item.getTargetChannelCode()));
ossFile.setUrlMd5(Utility.getMd5(ossFile.getFileUrl())); ossFile.setUrlMd5(Utility.getMd5(ossFile.getFileUrl()));
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_SUCCESS.getCode()); ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_SUCCESS.getCode());
ossFile.setFileName(item.getFileName()); ossFile.setFileName(item.getTargetFileName());
ossFile.setFileMd5(Utility.getMd5(ossFile.getFileUrl())); ossFile.setFileMd5(Utility.getMd5(ossFile.getFileUrl()));
return ossFile; return ossFile;
} }