feat: Enhance dataset file management with improved file copying

This commit is contained in:
Dallas98
2025-11-14 23:30:28 +08:00
committed by GitHub
parent 5638bdcf1c
commit e300d13c21
3 changed files with 35 additions and 28 deletions

View File

@@ -21,7 +21,6 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@@ -45,6 +44,7 @@ import java.nio.file.Paths;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
@@ -280,31 +280,38 @@ public class DatasetFileApplicationService {
continue; continue;
} }
String fileName = sourcePath.getFileName().toString(); String fileName = sourcePath.getFileName().toString();
File targetFile = new File(dataset.getPath(), fileName); File sourceFile = sourcePath.toFile();
try {
FileUtils.copyInputStreamToFile(Files.newInputStream(sourcePath), targetFile);
} catch (IOException e) {
log.error("Failed to copy file: {}", sourceFilePath, e);
continue;
}
LocalDateTime currentTime = LocalDateTime.now(); LocalDateTime currentTime = LocalDateTime.now();
DatasetFile datasetFile = DatasetFile.builder() DatasetFile datasetFile = DatasetFile.builder()
.id(UUID.randomUUID().toString()) .id(UUID.randomUUID().toString())
.datasetId(datasetId) .datasetId(datasetId)
.fileName(fileName) .fileName(fileName)
.fileType(AnalyzerUtils.getExtension(fileName)) .fileType(AnalyzerUtils.getExtension(fileName))
.fileSize(targetFile.length()) .fileSize(sourceFile.length())
.filePath(targetFile.getPath()) .filePath(Paths.get(dataset.getPath(), fileName).toString())
.uploadTime(currentTime) .uploadTime(currentTime)
.lastAccessTime(currentTime) .lastAccessTime(currentTime)
.build(); .build();
datasetFileRepository.save(datasetFile);
dataset.addFile(datasetFile); dataset.addFile(datasetFile);
copiedFiles.add(datasetFile); copiedFiles.add(datasetFile);
} }
datasetFileRepository.saveBatch(copiedFiles, 100);
dataset.active(); dataset.active();
datasetRepository.updateById(dataset); datasetRepository.updateById(dataset);
CompletableFuture.runAsync(() -> copyFilesToDatasetDir(req.sourcePaths(), dataset));
return copiedFiles; return copiedFiles;
} }
private void copyFilesToDatasetDir(List<String> sourcePaths, Dataset dataset) {
for (String sourcePath : sourcePaths) {
Path sourceFilePath = Paths.get(sourcePath);
Path targetFilePath = Paths.get(dataset.getPath(), sourceFilePath.getFileName().toString());
try {
Files.createDirectories(Path.of(dataset.getPath()));
Files.copy(sourceFilePath, targetFilePath);
} catch (IOException e) {
log.error("Failed to copy file from {} to {}", sourcePath, targetFilePath, e);
}
}
}
} }

View File

@@ -162,7 +162,7 @@
<version>${spring-boot.version}</version> <version>${spring-boot.version}</version>
<configuration> <configuration>
<finalName>data-mate</finalName> <finalName>data-mate</finalName>
<mainClass>com.datamate.main.DataMatePlatformApplication</mainClass> <mainClass>com.datamate.main.DataMateApplication</mainClass>
</configuration> </configuration>
<executions> <executions>
<execution> <execution>

View File

@@ -23,8 +23,8 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableAsync @EnableAsync
@EnableScheduling @EnableScheduling
@EnableCaching @EnableCaching
public class DataMatePlatformApplication { public class DataMateApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(DataMatePlatformApplication.class, args); SpringApplication.run(DataMateApplication.class, args);
} }
} }