From 9346f2d04dcfb279a1479a95fc1e5a1cbb123922 Mon Sep 17 00:00:00 2001 From: shihongwei <178899525@qq.com> Date: Wed, 27 May 2026 18:43:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/VideoChunkUploadServiceImpl.java | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/hotwj/platform/video/service/impl/VideoChunkUploadServiceImpl.java b/src/main/java/com/hotwj/platform/video/service/impl/VideoChunkUploadServiceImpl.java index 8ff6fe9..dfdcee4 100644 --- a/src/main/java/com/hotwj/platform/video/service/impl/VideoChunkUploadServiceImpl.java +++ b/src/main/java/com/hotwj/platform/video/service/impl/VideoChunkUploadServiceImpl.java @@ -46,11 +46,7 @@ public class VideoChunkUploadServiceImpl implements VideoChunkUploadService { @Override public List checkUploadedChunks(String fileHash) { - RSet rSet = RedisUtils.getClient().getSet(CHUNK_KEY_PREFIX + fileHash); - Set uploaded = rSet.readAll(); - List result = new ArrayList<>(uploaded); - result.sort(Integer::compareTo); - return result; + return getUploadedChunkIndexes(fileHash); } @Override @@ -79,8 +75,8 @@ public class VideoChunkUploadServiceImpl implements VideoChunkUploadService { return Collections.singletonMap("taskId", saveCompletedTask(bo.getFileHash(), bo.getFileName(), cachedM3u8Url)); } - RSet uploadedSet = RedisUtils.getClient().getSet(CHUNK_KEY_PREFIX + bo.getFileHash()); - Set uploaded = uploadedSet.readAll(); + List uploadedChunkIndexes = getUploadedChunkIndexes(bo.getFileHash()); + Set uploaded = new HashSet<>(uploadedChunkIndexes); for (int i = 0; i < bo.getTotalChunks(); i++) { if (!uploaded.contains(i)) { throw new ServiceException("存在未上传完成的分片,无法合并"); @@ -261,6 +257,30 @@ public class VideoChunkUploadServiceImpl implements VideoChunkUploadService { RedisUtils.setCacheObject(TASK_KEY_PREFIX + taskInfo.getTaskId(), taskInfo, properties.taskExpireDuration()); } + private List getUploadedChunkIndexes(String fileHash) { + File chunkDir = getChunkDir(fileHash); + if (!chunkDir.exists() || !chunkDir.isDirectory()) { + return Collections.emptyList(); + } + File[] chunkFiles = chunkDir.listFiles(); + if (chunkFiles == null || chunkFiles.length == 0) { + return Collections.emptyList(); + } + List result = new ArrayList<>(); + for (File chunkFile : chunkFiles) { + if (chunkFile == null || !chunkFile.isFile()) { + continue; + } + String fileName = chunkFile.getName(); + if (!fileName.matches("\\d+")) { + continue; + } + result.add(Integer.parseInt(fileName)); + } + result.sort(Integer::compareTo); + return result; + } + private String getResolvedM3u8Url(String fileHash) { String cachedM3u8Url = RedisUtils.getCacheObject(RESULT_KEY_PREFIX + fileHash); if (isOssUrl(cachedM3u8Url)) {