Skip to content

Commit e300d13

Browse files
authored
feat: Enhance dataset file management with improved file copying
1 parent 5638bdc commit e300d13

File tree

3 files changed

+35
-28
lines changed

3 files changed

+35
-28
lines changed

backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import com.fasterxml.jackson.databind.ObjectMapper;
2222
import jakarta.servlet.http.HttpServletResponse;
2323
import lombok.extern.slf4j.Slf4j;
24-
import org.apache.commons.io.FileUtils;
2524
import org.apache.ibatis.session.RowBounds;
2625
import org.springframework.beans.factory.annotation.Autowired;
2726
import org.springframework.beans.factory.annotation.Value;
@@ -45,6 +44,7 @@
4544
import java.time.LocalDateTime;
4645
import java.time.format.DateTimeFormatter;
4746
import java.util.*;
47+
import java.util.concurrent.CompletableFuture;
4848
import java.util.zip.ZipEntry;
4949
import java.util.zip.ZipOutputStream;
5050

@@ -76,7 +76,7 @@ public DatasetFileApplicationService(DatasetFileRepository datasetFileRepository
7676
*/
7777
@Transactional(readOnly = true)
7878
public Page<DatasetFile> getDatasetFiles(String datasetId, String fileType,
79-
String status, Pageable pageable) {
79+
String status, Pageable pageable) {
8080
RowBounds bounds = new RowBounds(pageable.getPageNumber() * pageable.getPageSize(), pageable.getPageSize());
8181
List<DatasetFile> content = datasetFileRepository.findByCriteria(datasetId, fileType, status, bounds);
8282
long total = content.size() < pageable.getPageSize() && pageable.getPageNumber() == 0 ? content.size() : content.size() + (long) pageable.getPageNumber() * pageable.getPageSize();
@@ -148,7 +148,7 @@ public void downloadDatasetFileAsZip(String datasetId, HttpServletResponse respo
148148
fileRename(allByDatasetId);
149149
response.setContentType("application/zip");
150150
String zipName = String.format("dataset_%s.zip",
151-
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
151+
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
152152
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + zipName);
153153
try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) {
154154
for (DatasetFile file : allByDatasetId) {
@@ -203,7 +203,7 @@ private void addToZipFile(DatasetFile file, ZipOutputStream zos) throws IOExcept
203203
* 预上传
204204
*
205205
* @param chunkUploadRequest 上传请求
206-
* @param datasetId 数据集id
206+
* @param datasetId 数据集id
207207
* @return 请求id
208208
*/
209209
@Transactional
@@ -245,15 +245,15 @@ private void saveFileInfoToDb(FileUploadResult fileUploadResult, UploadFileReque
245245
File savedFile = fileUploadResult.getSavedFile();
246246
LocalDateTime currentTime = LocalDateTime.now();
247247
DatasetFile datasetFile = DatasetFile.builder()
248-
.id(UUID.randomUUID().toString())
249-
.datasetId(datasetId)
250-
.fileSize(savedFile.length())
251-
.uploadTime(currentTime)
252-
.lastAccessTime(currentTime)
253-
.fileName(uploadFile.getFileName())
254-
.filePath(savedFile.getPath())
255-
.fileType(AnalyzerUtils.getExtension(uploadFile.getFileName()))
256-
.build();
248+
.id(UUID.randomUUID().toString())
249+
.datasetId(datasetId)
250+
.fileSize(savedFile.length())
251+
.uploadTime(currentTime)
252+
.lastAccessTime(currentTime)
253+
.fileName(uploadFile.getFileName())
254+
.filePath(savedFile.getPath())
255+
.fileType(AnalyzerUtils.getExtension(uploadFile.getFileName()))
256+
.build();
257257

258258
datasetFileRepository.save(datasetFile);
259259
dataset.addFile(datasetFile);
@@ -265,7 +265,7 @@ private void saveFileInfoToDb(FileUploadResult fileUploadResult, UploadFileReque
265265
* 复制文件到数据集目录
266266
*
267267
* @param datasetId 数据集id
268-
* @param req 复制文件请求
268+
* @param req 复制文件请求
269269
* @return 复制的文件列表
270270
*/
271271
@Transactional
@@ -280,31 +280,38 @@ public List<DatasetFile> copyFilesToDatasetDir(String datasetId, CopyFilesReques
280280
continue;
281281
}
282282
String fileName = sourcePath.getFileName().toString();
283-
File targetFile = new File(dataset.getPath(), fileName);
284-
try {
285-
FileUtils.copyInputStreamToFile(Files.newInputStream(sourcePath), targetFile);
286-
} catch (IOException e) {
287-
log.error("Failed to copy file: {}", sourceFilePath, e);
288-
continue;
289-
}
290-
283+
File sourceFile = sourcePath.toFile();
291284
LocalDateTime currentTime = LocalDateTime.now();
292285
DatasetFile datasetFile = DatasetFile.builder()
293286
.id(UUID.randomUUID().toString())
294287
.datasetId(datasetId)
295288
.fileName(fileName)
296289
.fileType(AnalyzerUtils.getExtension(fileName))
297-
.fileSize(targetFile.length())
298-
.filePath(targetFile.getPath())
290+
.fileSize(sourceFile.length())
291+
.filePath(Paths.get(dataset.getPath(), fileName).toString())
299292
.uploadTime(currentTime)
300293
.lastAccessTime(currentTime)
301294
.build();
302-
datasetFileRepository.save(datasetFile);
303295
dataset.addFile(datasetFile);
304296
copiedFiles.add(datasetFile);
305297
}
298+
datasetFileRepository.saveBatch(copiedFiles, 100);
306299
dataset.active();
307300
datasetRepository.updateById(dataset);
301+
CompletableFuture.runAsync(() -> copyFilesToDatasetDir(req.sourcePaths(), dataset));
308302
return copiedFiles;
309303
}
304+
305+
private void copyFilesToDatasetDir(List<String> sourcePaths, Dataset dataset) {
306+
for (String sourcePath : sourcePaths) {
307+
Path sourceFilePath = Paths.get(sourcePath);
308+
Path targetFilePath = Paths.get(dataset.getPath(), sourceFilePath.getFileName().toString());
309+
try {
310+
Files.createDirectories(Path.of(dataset.getPath()));
311+
Files.copy(sourceFilePath, targetFilePath);
312+
} catch (IOException e) {
313+
log.error("Failed to copy file from {} to {}", sourcePath, targetFilePath, e);
314+
}
315+
}
316+
}
310317
}

backend/services/main-application/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@
162162
<version>${spring-boot.version}</version>
163163
<configuration>
164164
<finalName>data-mate</finalName>
165-
<mainClass>com.datamate.main.DataMatePlatformApplication</mainClass>
165+
<mainClass>com.datamate.main.DataMateApplication</mainClass>
166166
</configuration>
167167
<executions>
168168
<execution>

backend/services/main-application/src/main/java/com/datamate/main/DataMatePlatformApplication.java renamed to backend/services/main-application/src/main/java/com/datamate/main/DataMateApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
@EnableAsync
2424
@EnableScheduling
2525
@EnableCaching
26-
public class DataMatePlatformApplication {
26+
public class DataMateApplication {
2727
public static void main(String[] args) {
28-
SpringApplication.run(DataMatePlatformApplication.class, args);
28+
SpringApplication.run(DataMateApplication.class, args);
2929
}
3030
}

0 commit comments

Comments
 (0)