update 更新入参/出参逻辑,对于原始的文件名称无法正确从上传的分片中正确获取,要求客户端进行传递,分片合并成功时回填ossId

This commit is contained in:
Liang 2024-04-01 10:15:04 +08:00
parent 0fb0555bc4
commit 614afb3d7f
3 changed files with 35 additions and 20 deletions

View File

@ -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;
/**
* 是否需要合并
*/

View File

@ -38,4 +38,10 @@ public class SysOssPartUploadVo implements Serializable {
*/
private Boolean mergeCompleted;
/**
* 分片上传ID - 仅在文件成功合并数据落库时才会生成
* @see this#mergeCompleted 分片文件合并状态
*/
private Long ossId;
}

View File

@ -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;
}