From b379e983da908881e1f7c1e14724b4393ece11af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com> Date: Sun, 11 Jul 2021 22:38:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/qiwenshare/file/component/FileDealComp.java | 6 ++++++ .../com/qiwenshare/file/service/FiletransferService.java | 1 + 2 files changed, 7 insertions(+) diff --git a/src/main/java/com/qiwenshare/file/component/FileDealComp.java b/src/main/java/com/qiwenshare/file/component/FileDealComp.java index fbe6f2a..b223f86 100644 --- a/src/main/java/com/qiwenshare/file/component/FileDealComp.java +++ b/src/main/java/com/qiwenshare/file/component/FileDealComp.java @@ -26,6 +26,8 @@ import java.util.Map; import java.util.Queue; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; /** * 文件逻辑处理组件 @@ -106,6 +108,9 @@ public class FileDealComp { * @param sessionUserId */ public void restoreParentFilePath(String filePath, Long sessionUserId) { + // 加锁,防止并发情况下有重复创建目录情况 + Lock lock = new ReentrantLock(); + lock.lock(); String parentFilePath = PathUtil.getParentPath(filePath); while(parentFilePath.contains("/")) { String fileName = parentFilePath.substring(parentFilePath.lastIndexOf("/") + 1); @@ -130,6 +135,7 @@ public class FileDealComp { } } + lock.unlock(); } diff --git a/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/src/main/java/com/qiwenshare/file/service/FiletransferService.java index 15814a0..998a4e1 100644 --- a/src/main/java/com/qiwenshare/file/service/FiletransferService.java +++ b/src/main/java/com/qiwenshare/file/service/FiletransferService.java @@ -104,6 +104,7 @@ public class FiletransferService implements IFiletransferService { if (relativePath.contains("/")) { userFile.setFilePath(uploadFileDto.getFilePath() + PathUtil.getParentPath(relativePath) + "/"); fileDealComp.restoreParentFilePath(uploadFileDto.getFilePath() + PathUtil.getParentPath(relativePath) + "/", userId); + } else { userFile.setFilePath(uploadFileDto.getFilePath()); }