diff --git a/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java b/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java index 4d19a04..be96ad5 100644 --- a/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java +++ b/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java @@ -65,6 +65,7 @@ public enum CodeEnum implements EnumBase { URL_BUCKET_NAME_KEY_ALL_EMPTY(508, "url-bucketName-key同时为空"), SIGN_URL_DOWNLOAD_FILEKEYS_EXCEEDS_MAXSIZE(509, "fileKeys exceeds the maximum size"), FILE_TARGET_APP_IS_EMPTY(510, "target app is empty"), + CHANNELCODE_DIFF(511, "云通道不同"), ; private final Integer code; diff --git a/oss-dal/src/main/java/cn/axzo/oss/dal/entity/File.java b/oss-dal/src/main/java/cn/axzo/oss/dal/entity/File.java index 4e58632..16a14b8 100644 --- a/oss-dal/src/main/java/cn/axzo/oss/dal/entity/File.java +++ b/oss-dal/src/main/java/cn/axzo/oss/dal/entity/File.java @@ -7,6 +7,8 @@ import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableField; import java.io.Serializable; +import java.util.Objects; + import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -149,4 +151,21 @@ public class File extends Model { return this.id; } + public Long fetchFileSize() { + if (Objects.isNull(this.getStorageSize()) || Objects.isNull(this.getStorageUnit())) { + return 0L; + } + + if (this.getStorageUnit().equalsIgnoreCase("b")) { + return this.getStorageSize().longValue(); + } + if (this.getStorageUnit().equalsIgnoreCase("kb")) { + return this.getStorageSize().longValue() * 1024L; + } + if (this.getStorageUnit().equalsIgnoreCase("mb")) { + return this.getStorageSize().longValue() * 1024 * 1024L; + } + return 0L; + } + } diff --git a/oss-http-api/src/main/java/cn/axzo/oss/http/model/ApiSignUrlDownloadResponse.java b/oss-http-api/src/main/java/cn/axzo/oss/http/model/ApiSignUrlDownloadResponse.java index 4796a26..e695910 100644 --- a/oss-http-api/src/main/java/cn/axzo/oss/http/model/ApiSignUrlDownloadResponse.java +++ b/oss-http-api/src/main/java/cn/axzo/oss/http/model/ApiSignUrlDownloadResponse.java @@ -29,4 +29,9 @@ public class ApiSignUrlDownloadResponse { */ private String fileName; + /** + * 文件大小 + */ + private Long storageSize; + } diff --git a/oss-http-api/src/main/java/cn/axzo/oss/http/model/copyobject/ServerFileBatchCopyObjectRequest.java b/oss-http-api/src/main/java/cn/axzo/oss/http/model/copyobject/ServerFileBatchCopyObjectRequest.java index b4e4ac1..8cb2466 100644 --- a/oss-http-api/src/main/java/cn/axzo/oss/http/model/copyobject/ServerFileBatchCopyObjectRequest.java +++ b/oss-http-api/src/main/java/cn/axzo/oss/http/model/copyobject/ServerFileBatchCopyObjectRequest.java @@ -52,37 +52,11 @@ public class ServerFileBatchCopyObjectRequest { @NotBlank(message = "唯一性标识不能为空") private String fileUuid; - /** - * 目标桶 - * 如果目标桶为空,则默认取源桶 - */ - private String targetBucketName; - - /** - * 目标目录 - * 如果目标目录为空,则默认在源目录同级 - */ - private String targetDict; - - /** - * 目标通道 - * 如果目标通道为空,则默认源通道 - */ - private String targetChannelCode; - /** * 文件名称(包含后缀) */ private String targetFileName; - /** - * 桶名称 - */ - private String srcBucketName; - /** - * 桶文件路径(目录+文件) - */ - private String srcBucketKey; /** * 文件对象key */ diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/CopyObjectCloudDto.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/CopyObjectCloudDto.java index fd01b6a..a697a0e 100644 --- a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/CopyObjectCloudDto.java +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/CopyObjectCloudDto.java @@ -73,14 +73,30 @@ public class CopyObjectCloudDto { public static CopyObjectCloudDto create(FileCopyObjectDto fileCopyObjectRequest, File file, FileBusinessScene fileBusinessScene,FileBusinessScene targetFileBiz) { // 入参中有通道,则优先取入参;否则取源通道 - String targetChannelCode = StringUtils.isBlank(fileCopyObjectRequest.getTargetChannelCode()) ? fileBusinessScene.getChannelCode() : fileCopyObjectRequest.getTargetChannelCode(); - String targetBucketName = StringUtils.isBlank(fileCopyObjectRequest.getTargetBucketName()) ? fileBusinessScene.getBucketName() : fileCopyObjectRequest.getTargetBucketName(); - String targetBucketDict = StringUtils.isBlank(fileCopyObjectRequest.getTargetDict()) ? fileBusinessScene.getDirectory() : fileCopyObjectRequest.getTargetDict(); - String fileName = StringUtils.isBlank(fileCopyObjectRequest.getTargetFileName()) ? file.getFileName() : fileCopyObjectRequest.getTargetFileName(); - - String appCode = (Objects.isNull(targetFileBiz) || StringUtils.isBlank(targetFileBiz.getAppCode())) ? fileBusinessScene.getAppCode() : targetFileBiz.getAppCode(); - String appChannelBucketNo = (Objects.isNull(targetFileBiz) || StringUtils.isBlank(targetFileBiz.getAppChannelBucketNo())) ? fileBusinessScene.getAppChannelBucketNo() : targetFileBiz.getAppChannelBucketNo(); + String targetChannelCode = fileBusinessScene.getChannelCode(); + String targetBucketName = fileBusinessScene.getBucketName(); + String targetBucketDict = fileBusinessScene.getDirectory(); + String appCode = fileBusinessScene.getAppCode(); + String appChannelBucketNo = fileBusinessScene.getAppChannelBucketNo(); + if (Objects.nonNull(targetFileBiz)) { + if (StringUtils.isNotBlank(targetFileBiz.getChannelCode())) { + targetChannelCode = targetFileBiz.getChannelCode(); + } + if (StringUtils.isNotBlank(targetFileBiz.getBucketName())) { + targetBucketName = targetFileBiz.getBucketName(); + } + if (StringUtils.isNotBlank(targetFileBiz.getDirectory())) { + targetBucketDict = targetFileBiz.getDirectory(); + } + if (StringUtils.isNotBlank(targetFileBiz.getAppCode())) { + appCode = targetFileBiz.getAppCode(); + } + if (StringUtils.isNotBlank(targetFileBiz.getAppChannelBucketNo())) { + appChannelBucketNo = targetFileBiz.getAppChannelBucketNo(); + } + } + String fileName = StringUtils.isNotBlank(fileCopyObjectRequest.getTargetFileName()) ? fileCopyObjectRequest.getTargetFileName() : file.getFileName(); String uuid = Utility.getUUID(); return CopyObjectCloudDto.builder() diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/response/SignUrlDownloadResponse.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/response/SignUrlDownloadResponse.java index 538a1a8..f031a05 100644 --- a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/response/SignUrlDownloadResponse.java +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/response/SignUrlDownloadResponse.java @@ -30,4 +30,9 @@ public class SignUrlDownloadResponse { */ private String fileName; + /** + * 文件大小 + */ + private Long storageSize; + } diff --git a/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java b/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java index d09bd6f..077c705 100644 --- a/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java +++ b/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java @@ -357,13 +357,10 @@ public class FileManagerImpl implements FileManager { */ @Override public Boolean copyObjects(CopyObjectCloudDto dto) { + //不同的通道不能复制 + BizException.error(Objects.equals(dto.getSrcChannelCode(), dto.getTargetChannelCode()), CodeEnum.CHANNELCODE_DIFF); // 相同的通道-对象复制 - if (dto.getSrcChannelCode().equals(dto.getTargetChannelCode())) { - return this.copyObjectWhenSameChannel(dto); - } - // 不同的通道,通过url上传至云(通过url复制至云) - String url = this.uploadByUrl(dto.getTargetBucketName(), dto.getTargetKey(), dto.getTargetFileName(), dto.getSrcUrl(), dto.getTargetChannelCode()); - return StringUtils.isBlank(url) ? false : true; + return this.copyObjectWhenSameChannel(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 9a2c410..2c84b2f 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 @@ -981,6 +981,7 @@ public class FileServiceImpl implements FileService { .signUrl(this.fileManager.buildPublicXImageProcess(url, style)) .fileKey(item.getFileUuid()) .fileName(item.getFileName()) + .storageSize(item.fetchFileSize()) .build(); case PRIVATE_BUCKET://私有桶 - 临时授权链接 例如 http://xxx.png?Expire=a&AccessKeyId=b&Signature=c&repsonse-content-disposition=d String signUrl = this.fileManager.signUrlDownload(item.getBucketName(), tgtFileKey, Objects.nonNull(expire) ? expire : SIGN_URL_DOWNLOAD_EXPIRE_SECOND , item.getChannelCode(), item.getFileName(), style, hasFileName); @@ -988,6 +989,7 @@ public class FileServiceImpl implements FileService { .signUrl(UrlUtil.httpToHttps(signUrl)) .fileKey(item.getFileUuid()) .fileName(item.getFileName()) + .storageSize(item.fetchFileSize()) .build(); default: BizException.error(CodeEnum.CHANNEL_TYPE_NOT_EXIST);