From 523a77f1ddf87245da256aa810024fef5441f5b1 Mon Sep 17 00:00:00 2001 From: jmal Date: Tue, 26 Mar 2024 18:03:50 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8E=E5=88=A0=E9=99=A4=E5=85=B6=E6=89=80?= =?UTF-8?q?=E6=9C=89=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/FileServiceImpl.java | 30 ++++++++++++++----- .../service/video/VideoProcessService.java | 6 +++- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/jmal/clouddisk/service/impl/FileServiceImpl.java b/src/main/java/com/jmal/clouddisk/service/impl/FileServiceImpl.java index 82626705..16cd4d07 100644 --- a/src/main/java/com/jmal/clouddisk/service/impl/FileServiceImpl.java +++ b/src/main/java/com/jmal/clouddisk/service/impl/FileServiceImpl.java @@ -62,6 +62,7 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import static com.jmal.clouddisk.service.IUserService.USER_ID; import static com.mongodb.client.model.Accumulators.sum; @@ -1787,29 +1788,42 @@ public ResponseResult delete(String username, String currentDirectory, L String filePath = fileProperties.getRootDir() + File.separator + username + currentDirectory1 + fileDocument.getName(); File file = new File(filePath); isDel = FileUtil.del(file); - videoProcessService.deleteVideoCacheById(username, fileDocument.getId()); if (Boolean.TRUE.equals(fileDocument.getIsFolder())) { // 删除文件夹及其下的所有文件 Query query1 = new Query(); query1.addCriteria(Criteria.where(USER_ID).is(userLoginHolder.getUserId())); query1.addCriteria(Criteria.where("path").regex("^" + ReUtil.escape(fileDocument.getPath() + fileDocument.getName()))); - mongoTemplate.remove(query1, COLLECTION_NAME); + List delFileDocumentList = mongoTemplate.findAllAndRemove(query1, FileDocument.class, COLLECTION_NAME); + // 提取出delFileDocumentList中文件id + List delFileIds = delFileDocumentList.stream().map(FileDocument::getId).collect(Collectors.toList()); + deleteDependencies(username, delFileIds); isDel = true; } pushMessage(username, fileDocument, "deleteFile"); } if (isDel) { mongoTemplate.remove(query, COLLECTION_NAME); - // delete history version - fileVersionService.deleteAll(fileIds); - // delete share - Query shareQuery = new Query(); - shareQuery.addCriteria(Criteria.where(Constants.FILE_ID).in(fileIds)); - mongoTemplate.remove(shareQuery, ShareDO.class); + deleteDependencies(username, fileIds); } else { throw new CommonException(-1, "删除失败"); } return ResultUtil.success(); } + /** + * 删除文件所依赖的数据 + * @param username username + * @param fileIds fileIds + */ + private void deleteDependencies(String username, List fileIds) { + // delete history version + fileVersionService.deleteAll(fileIds); + // delete video cache + videoProcessService.deleteVideoCacheByIds(username, fileIds); + // delete share + Query shareQuery = new Query(); + shareQuery.addCriteria(Criteria.where(Constants.FILE_ID).in(fileIds)); + mongoTemplate.remove(shareQuery, ShareDO.class); + } + } diff --git a/src/main/java/com/jmal/clouddisk/service/video/VideoProcessService.java b/src/main/java/com/jmal/clouddisk/service/video/VideoProcessService.java index 9979a18d..d146b924 100644 --- a/src/main/java/com/jmal/clouddisk/service/video/VideoProcessService.java +++ b/src/main/java/com/jmal/clouddisk/service/video/VideoProcessService.java @@ -36,6 +36,7 @@ import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -88,6 +89,10 @@ public void convertToM3U8(String fileId, String username, String relativePath, S }); } + public void deleteVideoCacheByIds(String username, List fileIds) { + fileIds.forEach(fileId -> deleteVideoCacheById(username, fileId)); + } + public void deleteVideoCacheById(String username, String fileId) { String videoCacheDir = getVideoCacheDir(username, fileId); if (FileUtil.exist(videoCacheDir)) { @@ -129,7 +134,6 @@ public String getVideoCover(String fileId, String username, String relativePath, videoPath = url.toString(); } } - // 获取视频的宽高比列, 来作为缩放比列 ProcessBuilder processBuilder = getVideoCoverProcessBuilder(videoPath, outputPath); Process process = processBuilder.start(); int exitCode = process.waitFor();