update 优化分片上传断点续传

This commit is contained in:
AprilWind 2024-05-09 08:51:47 +08:00
parent f76893ff9b
commit 38be1c9ac2
2 changed files with 9 additions and 3 deletions

View File

@ -51,9 +51,11 @@ public class MultipartBo implements Serializable {
private Integer partNumber;
/**
* 内容的 MD5 摘要初始化的时候需要第一片的md5值用来判断断点续传
*
* 内容的 MD5 摘要
* initiate初始化合并complete的时候需要第一片的md5值用来判断断点续传
* upload状态时非必需如果有值会校验
*/
@NotBlank(message = "第一片的md5值不能为空", groups = EditGroup.class)
@Size(max = 255, message = "内容的 MD5 摘要如果有的话不能超过255", groups = AddGroup.class)
private String md5Digest;
@ -62,12 +64,14 @@ public class MultipartBo implements Serializable {
* 最多分片一万一次性返回会造成前端性能问题需要前端多次校验
*/
@NotNull(message = "最大返回的分片数不能为空", groups = QueryGroup.class)
@Range(max = 1000, message = "最大返回的分片数不能超过1000", groups = EditGroup.class)
private Integer maxParts;
/**
* 分片编号的标记用于分页查询默认为0表示从第一个分片开始查询
*/
@NotNull(message = "分片编号的标记不能为空", groups = QueryGroup.class)
@Range(min = 0, max = 10000, message = "分片编号的标记长度必须在0到10000之间", groups = EditGroup.class)
private Integer partNumberMarker;
/**

View File

@ -25,6 +25,7 @@ import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.enumd.AccessPolicyType;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysOss;
import org.dromara.system.domain.bo.MultipartBo;
import org.dromara.system.domain.bo.SysOssBo;
@ -253,7 +254,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
@Override
public MultipartVo initiateMultipart(MultipartBo multipartBo) {
OssClient storage = OssFactory.instance();
String osskey = GlobalConstants.OSS_CONTINUATION + multipartBo.getMd5Digest();
String osskey = GlobalConstants.OSS_CONTINUATION + LoginHelper.getUserId() + multipartBo.getMd5Digest();
MultipartVo multipartVo = new MultipartVo();
// 检查是否存在缓存如果存在且超时时间在2小时内则从缓存中获取上传信息
@ -346,6 +347,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
// 保存文件信息
SysOssVo sysOssVo = buildResultEntity(multipartVo.getOriginalName(), multipartVo.getSuffix(), storage.getConfigKey(), uploadResult);
RedisUtils.deleteObject(uploadIdKey);
RedisUtils.deleteObject(GlobalConstants.OSS_CONTINUATION + LoginHelper.getUserId() + multipartBo.getMd5Digest());
return sysOssVo;
}