Skip to content

Commit

Permalink
perf: 优化删除文件后删除其所有依赖
Browse files Browse the repository at this point in the history
  • Loading branch information
jamebal committed Mar 26, 2024
1 parent beafe77 commit 523a77f
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 9 deletions.
30 changes: 22 additions & 8 deletions src/main/java/com/jmal/clouddisk/service/impl/FileServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -1787,29 +1788,42 @@ public ResponseResult<Object> 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<FileDocument> delFileDocumentList = mongoTemplate.findAllAndRemove(query1, FileDocument.class, COLLECTION_NAME);
// 提取出delFileDocumentList中文件id
List<String> 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<String> 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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -88,6 +89,10 @@ public void convertToM3U8(String fileId, String username, String relativePath, S
});
}

public void deleteVideoCacheByIds(String username, List<String> fileIds) {
fileIds.forEach(fileId -> deleteVideoCacheById(username, fileId));
}

public void deleteVideoCacheById(String username, String fileId) {
String videoCacheDir = getVideoCacheDir(username, fileId);
if (FileUtil.exist(videoCacheDir)) {
Expand Down Expand Up @@ -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();
Expand Down

0 comments on commit 523a77f

Please sign in to comment.