From 693941492a4af26dde34312411823beec4d4b59c Mon Sep 17 00:00:00 2001 From: MoeexT Date: Fri, 10 Apr 2026 17:25:16 +0800 Subject: [PATCH] fix: add file directory error --- .../DatasetFileApplicationService.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java b/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java index 4427c389..76679867 100644 --- a/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java +++ b/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java @@ -124,7 +124,7 @@ public PagedResponse getDatasetFilesWithDirectory(String datasetId, } // 使用 Path API 安全地构建路径 - Path basePath = Paths.get(datasetPath); + Path basePath = Paths.get(datasetPath).normalize(); Path queryPath = prefix.isEmpty() ? basePath : basePath.resolve(prefix).normalize(); // 确保查询路径在数据集路径下(防止路径遍历) @@ -149,7 +149,7 @@ public PagedResponse getDatasetFilesWithDirectory(String datasetId, try (Stream pathStream = Files.list(queryPath)) { List allFiles = pathStream - .filter(path -> path.toString().startsWith(datasetPath)) + .filter(path -> path.normalize().startsWith(basePath)) .sorted(Comparator .comparing((Path path) -> !Files.isDirectory(path)) .thenComparing(path -> path.getFileName().toString())) @@ -694,7 +694,7 @@ public void createDirectory(String datasetId, CreateDirectoryRequest req) { throw BusinessException.of(CommonErrorCode.PARAM_ERROR); } - Path basePath = Paths.get(datasetPath); + Path basePath = Paths.get(datasetPath).normalize(); Path targetPath = parentPrefix.isEmpty() ? basePath.resolve(directoryName) : basePath.resolve(parentPrefix).resolve(directoryName); @@ -1149,19 +1149,29 @@ private void addFile(String sourPath, String targetPath, boolean softAdd) { private static DatasetFile getDatasetFileForAdd(AddFilesRequest req, AddFilesRequest.FileRequest file, Dataset dataset, ObjectMapper objectMapper) throws JsonProcessingException { - Path sourcePath = Paths.get(file.getFilePath()); + Path sourcePath = Paths.get(file.getFilePath()).normalize(); File sourceFile = sourcePath.toFile(); file.getMetadata().put("softAdd", req.isSoftAdd()); LocalDateTime currentTime = LocalDateTime.now(); String fileName = sourcePath.getFileName().toString(); + Path datasetPath = Paths.get(dataset.getPath()).normalize(); + String filePath; + if (sourcePath.startsWith(datasetPath)) { + // 源文件已在数据集目录内,直接使用源文件路径,不复制 + filePath = sourcePath.toString(); + } else { + // 源文件在数据集目录外,构造目标路径 + filePath = Paths.get(dataset.getPath(), req.getPrefix(), fileName).toString(); + } + return DatasetFile.builder() .id(UUID.randomUUID().toString()) .datasetId(dataset.getId()) .fileName(fileName) .fileType(AnalyzerUtils.getExtension(fileName)) .fileSize(sourceFile.length()) - .filePath(Paths.get(dataset.getPath(), req.getPrefix(), fileName).toString()) + .filePath(filePath) .uploadTime(currentTime) .lastAccessTime(currentTime) .metadata(objectMapper.writeValueAsString(file.getMetadata()))