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..43b81720 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 @@ -1057,9 +1057,6 @@ private void setDatasetFileId(DatasetFile datasetFile, Dataset dataset) { */ @Transactional public List addFilesToDataset(String datasetId, AddFilesRequest req) { - if (!req.isValidPrefix()) { - throw BusinessException.of(DataManagementErrorCode.DIRECTORY_NOT_FOUND); - } Dataset dataset = datasetRepository.getById(datasetId); BusinessAssert.notNull(dataset, SystemErrorCode.RESOURCE_NOT_FOUND); List addedFiles = new ArrayList<>(); @@ -1161,7 +1158,7 @@ private static DatasetFile getDatasetFileForAdd(AddFilesRequest req, AddFilesReq .fileName(fileName) .fileType(AnalyzerUtils.getExtension(fileName)) .fileSize(sourceFile.length()) - .filePath(Paths.get(dataset.getPath(), req.getPrefix(), fileName).toString()) + .filePath(Paths.get(dataset.getPath(), req.getEffectivePrefix(file), fileName).toString()) .uploadTime(currentTime) .lastAccessTime(currentTime) .metadata(objectMapper.writeValueAsString(file.getMetadata())) diff --git a/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/interfaces/dto/AddFilesRequest.java b/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/interfaces/dto/AddFilesRequest.java index 66fdde47..6416c192 100644 --- a/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/interfaces/dto/AddFilesRequest.java +++ b/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/interfaces/dto/AddFilesRequest.java @@ -10,14 +10,13 @@ import lombok.NoArgsConstructor; import lombok.Setter; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import java.util.HashMap; import java.util.List; import java.util.Map; /** - * AddFilesRequest1 + * AddFilesRequest * * @since 2026/2/9 */ @@ -26,17 +25,34 @@ @NoArgsConstructor @AllArgsConstructor public class AddFilesRequest { + private boolean softAdd; + + @ValidPath + private String prefix = ""; + + @NotEmpty(message = "文件列表不能为空") + @Size(max = 1000, message = "文件数量不能超过1000个") + @Valid + private List files; + public AddFilesRequest(List paths) { if (CollectionUtils.isEmpty(paths)) { return; } this.files = paths.stream().map(path -> { - AddFilesRequest.FileRequest file = new AddFilesRequest.FileRequest(); + FileRequest file = new FileRequest(); file.setFilePath(path); - return file; + return file; }).toList(); } + /** + * 获取文件的前缀,优先使用文件自身的 prefix,为空时回退到请求级别的 prefix + */ + public String getEffectivePrefix(FileRequest file) { + return (file.getPrefix() != null && !file.getPrefix().isEmpty()) ? file.getPrefix() : prefix; + } + @Getter @Setter public static class FileRequest { @@ -44,20 +60,9 @@ public static class FileRequest { @Size(max = 1000, message = "文件路径长度不能超过1000个字符") private String filePath; - private Map metadata = new HashMap<>(); - } - - private boolean softAdd; + @ValidPath + private String prefix = ""; - @ValidPath() - private String prefix = ""; - - @NotEmpty(message = "文件列表不能为空") - @Size(max = 1000, message = "文件数量不能超过1000个") - @Valid - private List files; - - public boolean isValidPrefix() { - return StringUtils.isEmpty(prefix) || (!prefix.startsWith(".")); + private Map metadata = new HashMap<>(); } }