From 614afb3d7fb71c8571468f9999c19a58e44c6415 Mon Sep 17 00:00:00 2001 From: Liang <545073804@qq.com> Date: Mon, 1 Apr 2024 10:15:04 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E5=85=A5=E5=8F=82/?= =?UTF-8?q?=E5=87=BA=E5=8F=82=E9=80=BB=E8=BE=91=EF=BC=8C=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E5=8E=9F=E5=A7=8B=E7=9A=84=E6=96=87=E4=BB=B6=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE=E4=BB=8E=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E7=9A=84=E5=88=86=E7=89=87=E4=B8=AD=E6=AD=A3=E7=A1=AE=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=EF=BC=8C=E8=A6=81=E6=B1=82=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E4=BC=A0=E9=80=92=EF=BC=8C=E5=88=86=E7=89=87?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E6=88=90=E5=8A=9F=E6=97=B6=E5=9B=9E=E5=A1=AB?= =?UTF-8?q?ossId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/domain/bo/SysOssPartUploadBo.java | 16 +++++++-- .../system/domain/vo/SysOssPartUploadVo.java | 6 ++++ .../service/impl/SysOssServiceImpl.java | 33 +++++++++---------- 3 files changed, 35 insertions(+), 20 deletions(-) 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; }