From 3f5d325efd30718e70b69ba5bf016b48ba5b95d8 Mon Sep 17 00:00:00 2001 From: ThisBirchWood Date: Sat, 12 Jul 2025 19:12:25 +0200 Subject: [PATCH] ADD directory sharding for permanent clips --- .../ddf/vodsystem/services/ClipService.java | 1 - .../vodsystem/services/DirectoryService.java | 20 +++++++++++++++++-- .../ddf/vodsystem/services/UploadService.java | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/ddf/vodsystem/services/ClipService.java b/src/main/java/com/ddf/vodsystem/services/ClipService.java index 4ac48dc..06e0ee5 100644 --- a/src/main/java/com/ddf/vodsystem/services/ClipService.java +++ b/src/main/java/com/ddf/vodsystem/services/ClipService.java @@ -72,7 +72,6 @@ public class ClipService { return clipRepository.findByUser(user); } - private User getUser() { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (auth != null && auth.isAuthenticated() && auth.getPrincipal() instanceof CustomOAuth2User oAuth2user) { diff --git a/src/main/java/com/ddf/vodsystem/services/DirectoryService.java b/src/main/java/com/ddf/vodsystem/services/DirectoryService.java index 0eaa21a..3a9841f 100644 --- a/src/main/java/com/ddf/vodsystem/services/DirectoryService.java +++ b/src/main/java/com/ddf/vodsystem/services/DirectoryService.java @@ -43,12 +43,27 @@ public class DirectoryService { } public File getOutputFile(String id, String extension) { - String dir = outputDir + File.separator + id + (extension.isEmpty() ? "" : "." + extension); + if (id == null || id.length() < 2) { + throw new IllegalArgumentException("ID must be at least 2 characters long"); + } + + // Create subdirectories from first 2 characters of the ID + String shard1 = id.substring(0, 2); + String shard2 = id.substring(2); + + String dir = outputDir + + File.separator + + shard1 + + File.separator + + shard2 + + (extension.isEmpty() ? "" : "." + extension); + return new File(dir); } - public void saveData(File file, MultipartFile multipartFile) { + public void saveAtDir(File file, MultipartFile multipartFile) { try { + createDirectory(file.getAbsolutePath()); Path filePath = Paths.get(file.getAbsolutePath()); Files.copy(multipartFile.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { @@ -61,6 +76,7 @@ public class DirectoryService { Path destPath = Paths.get(target.getAbsolutePath()); try { + Files.createDirectories(destPath.getParent()); Files.copy(sourcePath, destPath, StandardCopyOption.REPLACE_EXISTING); logger.info("Copied file from {} to {}", sourcePath, destPath); } catch (IOException e) { diff --git a/src/main/java/com/ddf/vodsystem/services/UploadService.java b/src/main/java/com/ddf/vodsystem/services/UploadService.java index bd010d3..9afbc75 100644 --- a/src/main/java/com/ddf/vodsystem/services/UploadService.java +++ b/src/main/java/com/ddf/vodsystem/services/UploadService.java @@ -38,7 +38,7 @@ public class UploadService { File inputFile = directoryService.getTempInputFile(uuid, extension); File outputFile = directoryService.getTempOutputFile(uuid, extension); - directoryService.saveData(inputFile, file); + directoryService.saveAtDir(inputFile, file); // add job logger.info("Uploaded file and creating job with UUID: {}", uuid);