diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysOssPartUploadBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysOssPartUploadBo.java index 0291ce95f..295c82900 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysOssPartUploadBo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysOssPartUploadBo.java @@ -1,6 +1,7 @@ package org.dromara.system.domain.bo; import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -26,9 +27,8 @@ public class SysOssPartUploadBo implements Serializable { /** * 文件名 - * TODO 非必填,如果为空则从上传的文件中获取 */ -// @NotBlank(message = "文件名不能为空") + @NotBlank(message = "文件名不能为空") private String fileName; /** @@ -44,6 +44,18 @@ public class SysOssPartUploadBo implements Serializable { @Min(value = 1, message = "分片序号不能小于1") private Integer partNumber; + /** + * 分片大小 + */ +// @NotNull(message = "分片大小不能为空") + private Long partSize; + + /** + * 分片数量 + */ +// @NotNull(message = "分片数量不能为空") + private Long totalParts; + /** * 是否需要合并 */ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssPartUploadVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssPartUploadVo.java index 784f0af06..335200d83 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssPartUploadVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssPartUploadVo.java @@ -38,4 +38,10 @@ public class SysOssPartUploadVo implements Serializable { */ private Boolean mergeCompleted; + /** + * 分片上传ID - 仅在文件成功合并,数据落库时才会生成 + * @see this#mergeCompleted 分片文件合并状态 + */ + private Long ossId; + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java index ec633ffd5..46563f409 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java @@ -275,19 +275,13 @@ public class SysOssServiceImpl implements ISysOssService, OssService { private SysOssPartUploadVo createPartUpload(MultipartFile file, SysOssPartUploadBo bo) throws IOException { // 文件大小 Long fileSize = bo.getFileSize(); - // 获取第一片文件的大小作为分片大小 - long partSize = file.getSize(); - // 计算总片数 - long totalParts = fileSize / partSize; - // 当除以分数有余数时每分片总数+1 - if (fileSize % partSize > 0) { - totalParts += 1; - } - // 获取文件名,如果文件名为空,则使用从上传的文件中获取 + // 分片大小 + Long partSize = bo.getPartSize(); + // 分片数量 + Long totalParts = bo.getTotalParts(); + // 文件名 String originalFileName = bo.getFileName(); - if (StringUtils.isBlank(originalFileName)) { - originalFileName = file.getOriginalFilename(); - } + // 从文件名中获取文件后缀 String suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf("."), originalFileName.length()); OssClient storage = OssFactory.instance(); CreatePartUploadResult partUpload = storage.createPartUploadSuffix(suffix); @@ -319,7 +313,14 @@ public class SysOssServiceImpl implements ISysOssService, OssService { * @return 分片上传对象信息VO */ private SysOssPartUploadVo partUpload(OssClient storage, PartUploadInfo partUploadInfo, MultipartFile file, Integer partNumber) throws IOException { + // 文件上传ID String uploadId = partUploadInfo.getUploadId(); + // 构建分片上传对象信息VO + SysOssPartUploadVo sysOssPartUploadVo = new SysOssPartUploadVo(); + sysOssPartUploadVo.setUploadId(uploadId); + sysOssPartUploadVo.setUrl(partUploadInfo.getUrl()); + sysOssPartUploadVo.setPartInfoList(partUploadInfo.getPartInfoList()); + sysOssPartUploadVo.setMergeCompleted(partUploadInfo.isNeedMerge()); // 上传分片 PartUploadResult partUploadResult = storage.partUpload(file.getInputStream(), partUploadInfo.getFileName(), uploadId, partNumber, file.getSize()); // 将完成上传的分片信息放入集合中 @@ -340,13 +341,9 @@ public class SysOssServiceImpl implements ISysOssService, OssService { oss.setFileName(partUploadInfo.getFileName()); oss.setUrl(partUploadInfo.getUrl()); baseMapper.insert(oss); + // 回填对象存储ID + sysOssPartUploadVo.setOssId(oss.getOssId()); } - // 构建分片上传对象信息VO - SysOssPartUploadVo sysOssPartUploadVo = new SysOssPartUploadVo(); - sysOssPartUploadVo.setUploadId(uploadId); - sysOssPartUploadVo.setUrl(partUploadInfo.getUrl()); - sysOssPartUploadVo.setPartInfoList(partUploadInfo.getPartInfoList()); - sysOssPartUploadVo.setMergeCompleted(partUploadInfo.isNeedMerge()); return sysOssPartUploadVo; }