From 38b811f8e62939c89a38fa285395411e7cd69956 Mon Sep 17 00:00:00 2001 From: zhaojun1998 Date: Tue, 28 Jan 2020 13:25:28 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E6=96=B0=E5=A2=9E=20'=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E5=8C=85=E5=90=AB=E5=8A=A0=E5=AF=86=E6=96=87=E4=BB=B6?= =?UTF-8?q?'=20=E6=94=AF=E6=8C=81.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/service/AbstractFileService.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/main/java/im/zhaojun/common/service/AbstractFileService.java b/src/main/java/im/zhaojun/common/service/AbstractFileService.java index 847fe07..fb27be2 100644 --- a/src/main/java/im/zhaojun/common/service/AbstractFileService.java +++ b/src/main/java/im/zhaojun/common/service/AbstractFileService.java @@ -7,7 +7,9 @@ import com.alicp.jetcache.anno.CacheRefresh; import com.alicp.jetcache.anno.CacheType; import com.alicp.jetcache.anno.Cached; import com.alicp.jetcache.anno.CreateCache; +import im.zhaojun.common.model.constant.ZFileConstant; import im.zhaojun.common.model.dto.FileItemDTO; +import im.zhaojun.common.model.dto.SystemConfigDTO; import im.zhaojun.common.model.enums.FileTypeEnum; import im.zhaojun.common.model.enums.StorageTypeEnum; import im.zhaojun.common.util.StringUtils; @@ -21,6 +23,7 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -119,9 +122,8 @@ public abstract class AbstractFileService extends FileCacheService implements Fi * 搜索文件 * @param name 文件名 * @return 包含该文件名的所有文件或文件夹 - * @throws Exception 搜索过程出现的异常 */ - public List search(String name) throws Exception { + public List search(String name) { List result = new ArrayList<>(); boolean searchIgnoreCase = systemConfigService.getSearchIgnoreCase(); @@ -168,7 +170,7 @@ public abstract class AbstractFileService extends FileCacheService implements Fi if (fileItemDTO.getType() == FileTypeEnum.FOLDER) { String filePath = StringUtils.removeDuplicateSeparator("/" + fileItemDTO.getPath() + "/" + fileItemDTO.getName() + "/"); List cacheList = cache.get(filePath); - if (cacheList != null) { + if (cacheList != null && isNotEncryptedFolder(cacheList)) { queue.addAll(cacheList); } } @@ -177,12 +179,32 @@ public abstract class AbstractFileService extends FileCacheService implements Fi return result; } + /** + * 不是加密文件夹 + * @param list 文件夹中的内容 + * @return 返回此文件夹是否加密. + */ + private boolean isNotEncryptedFolder(List list) { + // 如果开启了 "搜索包含加密文件" 选项, 则直接返回 true. + SystemConfigDTO systemConfig = systemConfigService.getSystemConfig(); + if (systemConfig.getSearchContainEncryptedFile()) { + return true; + } + + // 遍历文件判断是否包含 + for (FileItemDTO fileItemDTO : list) { + if (Objects.equals(ZFileConstant.PASSWORD_FILE_NAME, fileItemDTO.getName())) { + return false; + } + } + return true; + } + /** * 获取所有缓存的 Key, 仅当开启缓存, 且缓存完成时, 可获取. * @return 所有缓存的 Key - * @throws Exception 可能出现的异常 */ - public Set getCacheKeys() throws Exception { + public Set getCacheKeys() { if (systemConfigService.getEnableCache() && fileAsyncCacheService.isCacheFinish()) { Set collect = selectAllFileList().stream().map(fileItemDTO -> { if (fileItemDTO.getType() == FileTypeEnum.FOLDER) {