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()), "入参为空");
List<FileCopyObjectDto> fileCopyObjectDtos = BeanUtil.copyToList(request.getCopyObjects(), FileCopyObjectDto.class);
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)
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 srcBucketKey;
/**

View File

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

View File

@ -5,9 +5,7 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
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
*/
private String fileKey;
private String srcFileKey;
/**
* 文件名称
*/
private String fileName;
private String srcFileName;
public static FileCopyObjectResponse create(CopyObjectCloudDto item) {
return FileCopyObjectResponse.builder()
@ -61,10 +61,10 @@ public class FileCopyObjectResponse {
.targetFileKey(item.getTargetKey())
.targetChannelCode(item.getTargetChannelCode())
// .targetDownloadUrl(this.fileManager.fetchDownloadUrl(item.getFile().getb))
.bucketName(item.getFile().getBucketName())
.bucketDict(item.getFile().getDirectory())
.fileKey(item.getFile().getFileUuid())
.fileName(item.getFileName())
.srcBucketName(item.getFile().getBucketName())
.srcBucketDict(item.getFile().getDirectory())
.srcFileKey(item.getFile().getFileUuid())
.srcFileName(item.getTargetFileName())
.build();
}

View File

@ -357,7 +357,7 @@ public class FileManagerImpl implements FileManager {
return this.copyObjectWhenSameChannel(dto);
}
// 不同的通道通过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;
}
@ -368,7 +368,7 @@ public class FileManagerImpl implements FileManager {
ChannelTypeEnum typeEnum = ChannelTypeEnum.getChannelTypeByChannelCode(dto.getSrcChannelCode());
switch (typeEnum) {
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;
case OSS:// 阿里云
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.setChannelCode(item.getTargetChannelCode());
ossFile.setBucketName(item.getTargetBucketName());
ossFile.setDirectory(item.getTargetBucketKey());
ossFile.setDirectory(item.getTargetBucketDict());
ossFile.setStorageUnit(item.getFile().getStorageUnit());
ossFile.setStorageSize(item.getFile().getStorageSize());
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.setUrlMd5(Utility.getMd5(ossFile.getFileUrl()));
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_SUCCESS.getCode());
ossFile.setFileName(item.getFileName());
ossFile.setFileName(item.getTargetFileName());
ossFile.setFileMd5(Utility.getMd5(ossFile.getFileUrl()));
return ossFile;
}