From 10703857f7ea2e02d84feda196cddcf252f1bc19 Mon Sep 17 00:00:00 2001 From: backdev-1 Date: Tue, 9 Jun 2026 11:29:46 +0700 Subject: [PATCH] Add file public for thumbnail --- .../nocopy/controller/FileController.java | 29 +++++++++++++++++++ .../handler/FileInteranlInfoHandler.java | 2 +- .../nocopy/service/FileSimilarityService.java | 2 +- .../service/file/FileEntityService.java | 2 +- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/soune/nocopy/controller/FileController.java b/src/main/java/ru/soune/nocopy/controller/FileController.java index 614d35a..a28952e 100644 --- a/src/main/java/ru/soune/nocopy/controller/FileController.java +++ b/src/main/java/ru/soune/nocopy/controller/FileController.java @@ -156,6 +156,35 @@ public class FileController { .body(resource); } + @GetMapping("/public/{fileId}/{type}") + public ResponseEntity getPublicFileWithTpe( + @PathVariable String fileId, @PathVariable String type) throws IOException { + + FileEntity fileEntity = fileRepository.findById(fileId) + .orElseThrow(() -> new RuntimeException("File not found")); + + String filePath = type.equals("thumbnail") ? fileEntity.getThumbnailPath(): fileEntity.getFilePath(); + + if (fileEntity.getProtectionStatus() == ProtectionStatus.NOT_PROTECTED || + fileEntity.getProtectionStatus() == ProtectionStatus.PROCESSING) { + throw new RuntimeException("File is not protected"); + } + + String fileName = fileEntity.getOriginalFileName().replace("." + + fileEntity.getFileExtension(), "") + "_nocopy_protected" + + "." + fileEntity.getFileExtension(); + String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8) + .replace("+", "%20"); + + InputStreamResource resource = new InputStreamResource(cloudStorageService.readFileFromStorage(filePath)); + + return ResponseEntity.ok() + .contentType(new MediaType(fileEntity.getMimeType(), fileEntity.getFileExtension())) + .header(HttpHeaders.CONTENT_DISPOSITION, + "inline; filename*=UTF-8''" + encodedFileName) + .body(resource); + } + @GetMapping("check-file/status/{userId}") public ResponseEntity getStatus(@PathVariable Long userId) { CheckStatus status = checkCounterService.getCurrentStatus(userId); diff --git a/src/main/java/ru/soune/nocopy/handler/FileInteranlInfoHandler.java b/src/main/java/ru/soune/nocopy/handler/FileInteranlInfoHandler.java index 8aead44..561fccb 100644 --- a/src/main/java/ru/soune/nocopy/handler/FileInteranlInfoHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/FileInteranlInfoHandler.java @@ -86,7 +86,7 @@ public class FileInteranlInfoHandler implements RequestHandler { fileMap.put("fileId", file.getId()); fileMap.put("fileName", file.getOriginalFileName()); fileMap.put("downloadUrl", "/api/admin/download/" + file.getId()); - fileMap.put("image", baseUrl + "/api/files/protected/" + file.getId() + "/thumbnail"); + fileMap.put("image", baseUrl + "/api/files/public/" + file.getId() + "/thumbnail"); fileMap.put("userId", file.getUserId()); fileMap.put("status", file.getStatus() != null ? file.getStatus().name() : null); diff --git a/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java b/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java index 18ce025..3b662cb 100644 --- a/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java +++ b/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java @@ -246,7 +246,7 @@ public class FileSimilarityService { .status(similarImageProjection.getProtectionStatus()) .owner(owner) // .url(baseUrl + "/api/files/protected/" + similarImageProjection.getId()) - .url(baseUrl + "/api/files/protected/" + similarImageProjection.getId() + "/thumbnail") + .url(baseUrl + "/api/files/public/" + similarImageProjection.getId() + "/thumbnail") .fileStatus(similarImageProjection.getFileStatus()) .build(); } diff --git a/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java b/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java index 0e5c0b5..e155ef6 100644 --- a/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java +++ b/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java @@ -438,7 +438,7 @@ public class FileEntityService { .checksCount(0) .fileUploadDate(fileEntity.getCreatedAt()) .protectedFilePath(fileEntity.getProtectedFilePath()) - .thumbnailFileUrl(baseUrl + "/api/files/protected/" + fileEntity.getId() + "/thumbnail") + .thumbnailFileUrl(baseUrl + "/api/files/public/" + fileEntity.getId() + "/thumbnail") .permissions(fileEntity.getPermissions()) .appealInfos(appeals) .build();