update 优化初始化分片上传任务

This commit is contained in:
AprilWind 2024-04-28 12:40:27 +08:00
parent 4a931b069b
commit 251622035f
3 changed files with 21 additions and 15 deletions

View File

@ -119,10 +119,8 @@ public class SysOssController extends BaseController {
String ossStatus = multipartBo.getOssStatus();
return switch (ossStatus) {
case "initiate" -> {
String originalName = multipartBo.getOriginalName();
String md5Digest = multipartBo.getMd5Digest();
if (StringUtils.isNotEmpty(originalName) && StringUtils.isNotEmpty(md5Digest)) {
yield R.ok(ossService.initiateMultipart(originalName, md5Digest));
if (StringUtils.isNotEmpty(multipartBo.getOriginalName()) && StringUtils.isNotEmpty(multipartBo.getMd5Digest())) {
yield R.ok(ossService.initiateMultipart(multipartBo));
} else {
yield R.fail("Original name and MD5 digest cannot be empty");
}
@ -131,7 +129,7 @@ public class SysOssController extends BaseController {
ValidatorUtils.validate(multipartBo, AddGroup.class);
yield R.ok(ossService.uploadPart(multipartBo));
}
case "list" -> {
case "query" -> {
ValidatorUtils.validate(multipartBo, QueryGroup.class);
yield R.ok(ossService.uploadPartList(multipartBo));
}

View File

@ -82,16 +82,16 @@ public interface ISysOssService {
/**
* 初始化分片上传任务
*
* @param originalName 文件原名
* @param multipartBo 初始化分片的参数对象
* @return 分片上传对象信息
*/
MultipartVo initiateMultipart(String originalName, String md5Digest);
MultipartVo initiateMultipart(MultipartBo multipartBo);
/**
* 上传文件的分段分片上传
*
* @param multipartBo SysOssMultipartBo 分段上传的参数对象
* @return SysOssMultipartVo 分片上传成功后的对象信息
* @param multipartBo 分段上传的参数对象
* @return 分片上传成功后的对象信息
*/
MultipartVo uploadPart(MultipartBo multipartBo);

View File

@ -247,20 +247,28 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
/**
* 初始化分片上传任务
*
* @param originalName 文件原名
* @param multipartBo 初始化分片的参数对象
* @return 分片上传对象信息
*/
@Override
public MultipartVo initiateMultipart(String originalName, String md5Digest) {
String osskey = GlobalConstants.OSS_CONTINUATION + md5Digest;
public MultipartVo initiateMultipart(MultipartBo multipartBo) {
OssClient storage = OssFactory.instance();
String osskey = GlobalConstants.OSS_CONTINUATION + multipartBo.getMd5Digest();
MultipartVo multipartVo = new MultipartVo();
// 检查是否存在缓存如果存在且超时时间在2小时内则从缓存中获取上传信息
long timeout = RedisUtils.getTimeToLive(osskey);
if ((timeout < 0 ? timeout : timeout / 1000) > 60 * 60 * 2) {
multipartVo = RedisUtils.getCacheObject(osskey);
// 获取上传分段进度
List<PartUploadResult> listParts = storage.listParts(multipartVo.getFilename(), multipartVo.getUploadId(), null, null);
multipartVo.setPartUploadList(listParts.stream()
.map(x -> new MultipartVo.PartUploadResult(x.getPartNumber(), x.getETag()))
.collect(Collectors.toList()));
} else {
String originalName = multipartBo.getOriginalName();
String suffix = StringUtils.substring(originalName, originalName.lastIndexOf("."), originalName.length());
OssClient storage = OssFactory.instance();
UploadResult uploadResult = storage.initiateMultipart(suffix);
multipartVo.setFilename(uploadResult.getFilename());
multipartVo.setUploadId(uploadResult.getUploadId());
@ -275,8 +283,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
/**
* 上传文件的分段分片上传
*
* @param multipartBo MultipartBo 分段上传的参数对象
* @return MultipartVo 分片上传成功后的对象信息
* @param multipartBo 分段上传的参数对象
* @return 分片上传成功后的对象信息
*/
@Override
public MultipartVo uploadPart(MultipartBo multipartBo) {