You've already forked DataMate
feat(rag): 添加文件相对路径支持功能
- 在FileInfo DTO中新增relativePath字段 - 实现文件相对路径的规范化处理逻辑 - 将文件相对路径存储到元数据中 - 前端添加文件路径解析和显示功能 - 优化路径分隔符统一处理机制 - 更新文件列表展示逻辑以支持路径层级结构
This commit is contained in:
@@ -35,7 +35,9 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
@@ -47,6 +49,8 @@ import java.util.Optional;
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class KnowledgeBaseService {
|
||||
private static final String RELATIVE_PATH_KEY = "relativePath";
|
||||
private static final String PATH_SEPARATOR = "/";
|
||||
private final KnowledgeBaseRepository knowledgeBaseRepository;
|
||||
private final RagFileRepository ragFileRepository;
|
||||
private final ApplicationEventPublisher eventPublisher;
|
||||
@@ -146,6 +150,12 @@ public class KnowledgeBaseService {
|
||||
ragFile.setKnowledgeBaseId(knowledgeBase.getId());
|
||||
ragFile.setFileId(fileInfo.id());
|
||||
ragFile.setFileName(fileInfo.fileName());
|
||||
String relativePath = normalizeRelativePath(fileInfo.relativePath());
|
||||
if (StringUtils.hasText(relativePath)) {
|
||||
Map<String, Object> metadata = new HashMap<>();
|
||||
metadata.put(RELATIVE_PATH_KEY, relativePath);
|
||||
ragFile.setMetadata(metadata);
|
||||
}
|
||||
ragFile.setStatus(FileStatus.UNPROCESSED);
|
||||
return ragFile;
|
||||
}).toList();
|
||||
@@ -153,6 +163,17 @@ public class KnowledgeBaseService {
|
||||
eventPublisher.publishEvent(new DataInsertedEvent(knowledgeBase, request));
|
||||
}
|
||||
|
||||
private String normalizeRelativePath(String relativePath) {
|
||||
if (!StringUtils.hasText(relativePath)) {
|
||||
return "";
|
||||
}
|
||||
String normalized = relativePath.replace("\\", PATH_SEPARATOR).trim();
|
||||
while (normalized.startsWith(PATH_SEPARATOR)) {
|
||||
normalized = normalized.substring(1);
|
||||
}
|
||||
return normalized;
|
||||
}
|
||||
|
||||
public PagedResponse<RagFile> listFiles(String knowledgeBaseId, RagFileReq request) {
|
||||
IPage<RagFile> page = new Page<>(request.getPage(), request.getSize());
|
||||
request.setKnowledgeBaseId(knowledgeBaseId);
|
||||
@@ -222,4 +243,4 @@ public class KnowledgeBaseService {
|
||||
});
|
||||
return searchResults;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,6 @@ public class AddFilesReq {
|
||||
private String delimiter;
|
||||
private List<FileInfo> files;
|
||||
|
||||
public record FileInfo(String id, String fileName) {
|
||||
public record FileInfo(String id, String fileName, String relativePath) {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user