2121import com .fasterxml .jackson .databind .ObjectMapper ;
2222import jakarta .servlet .http .HttpServletResponse ;
2323import lombok .extern .slf4j .Slf4j ;
24- import org .apache .commons .io .FileUtils ;
2524import org .apache .ibatis .session .RowBounds ;
2625import org .springframework .beans .factory .annotation .Autowired ;
2726import org .springframework .beans .factory .annotation .Value ;
4544import java .time .LocalDateTime ;
4645import java .time .format .DateTimeFormatter ;
4746import java .util .*;
47+ import java .util .concurrent .CompletableFuture ;
4848import java .util .zip .ZipEntry ;
4949import 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}
0 commit comments