diff --git a/src/main/java/ru/soune/nocopy/adminpanel/client/DashBoardAppClient.java b/src/main/java/ru/soune/nocopy/adminpanel/client/DashBoardAppClient.java index de50731..1dbab82 100644 --- a/src/main/java/ru/soune/nocopy/adminpanel/client/DashBoardAppClient.java +++ b/src/main/java/ru/soune/nocopy/adminpanel/client/DashBoardAppClient.java @@ -25,5 +25,5 @@ public interface DashBoardAppClient { Map internalDataControl(@RequestBody BaseRequest request); @GetMapping("api/internal/data-download/{fileId}") - ResponseEntity download(@PathVariable String fileId); + ResponseEntity download(@PathVariable String fileId); } diff --git a/src/main/java/ru/soune/nocopy/adminpanel/controller/AdminController.java b/src/main/java/ru/soune/nocopy/adminpanel/controller/AdminController.java index d8eb31f..0683c6c 100644 --- a/src/main/java/ru/soune/nocopy/adminpanel/controller/AdminController.java +++ b/src/main/java/ru/soune/nocopy/adminpanel/controller/AdminController.java @@ -4,9 +4,11 @@ import feign.FeignException; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; import ru.soune.nocopy.adminpanel.client.DashBoardAppClient; import ru.soune.nocopy.adminpanel.dto.BaseRequest; import ru.soune.nocopy.adminpanel.dto.BaseResponse; @@ -129,11 +131,27 @@ public class AdminController { .messageDesc("You can't control") .build()); } - try { - return dashBoardAppClient.download(fileId); + ResponseEntity response = dashBoardAppClient.download(fileId); + + StreamingResponseBody stream = outputStream -> { + outputStream.write(response.getBody()); + outputStream.flush(); + }; + + return ResponseEntity.ok() + .contentType(response.getHeaders().getContentType()) + .header(HttpHeaders.CONTENT_DISPOSITION, + response.getHeaders().getFirst(HttpHeaders.CONTENT_DISPOSITION)) + .header(HttpHeaders.CACHE_CONTROL, + response.getHeaders().getFirst(HttpHeaders.CACHE_CONTROL)) + .body(stream); } catch (FeignException.NotFound e) { return ResponseEntity.notFound().build(); + } catch (FeignException e) { + log.error("Error downloading file: {}", fileId, e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } + } }