dev #1
@@ -25,5 +25,5 @@ public interface DashBoardAppClient {
|
|||||||
Map<String, Object> internalDataControl(@RequestBody BaseRequest request);
|
Map<String, Object> internalDataControl(@RequestBody BaseRequest request);
|
||||||
|
|
||||||
@GetMapping("api/internal/data-download/{fileId}")
|
@GetMapping("api/internal/data-download/{fileId}")
|
||||||
ResponseEntity<Resource> download(@PathVariable String fileId);
|
ResponseEntity<byte[]> download(@PathVariable String fileId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,11 @@ import feign.FeignException;
|
|||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.*;
|
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.client.DashBoardAppClient;
|
||||||
import ru.soune.nocopy.adminpanel.dto.BaseRequest;
|
import ru.soune.nocopy.adminpanel.dto.BaseRequest;
|
||||||
import ru.soune.nocopy.adminpanel.dto.BaseResponse;
|
import ru.soune.nocopy.adminpanel.dto.BaseResponse;
|
||||||
@@ -129,11 +131,27 @@ public class AdminController {
|
|||||||
.messageDesc("You can't control")
|
.messageDesc("You can't control")
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return dashBoardAppClient.download(fileId);
|
ResponseEntity<byte[]> 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) {
|
} catch (FeignException.NotFound e) {
|
||||||
return ResponseEntity.notFound().build();
|
return ResponseEntity.notFound().build();
|
||||||
|
} catch (FeignException e) {
|
||||||
|
log.error("Error downloading file: {}", fileId, e);
|
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user