Я пытаюсь создать службу отдыха для загрузки файлов из репозитория, используя Springboot.
Я пытаюсь вернуть ResponseEntity с StreamingResponseBody, чтобы вернуть файл, который я получаю из хранилища, в качестве InputStream.
Это текущий код, который у меня есть:
@GetMapping(path = "/downloadFile")
public ResponseEntity<StreamingResponseBody> downloadFile(@RequestParam(value = "documentId") String documentId,
HttpServletRequest request, HttpServletResponse response) throws InterruptedException, IOException {
InputStream is = downloadService.getDocument(documentId);
StreamingResponseBody out = outputStream -> {
outputStream.write(IOUtils.toByteArray(is));
};
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "text/csv");
headers.add("Content-Disposition", "attachment; filename=" + documentId);
headers.add("Pragma", "no-cache");
headers.add("Cache-Control", "no-cache");
return (new ResponseEntity<>(out, headers, HttpStatus.OK));
}
Когда я использую эту конечную точку, используя непосредственно браузер или почтальона, загружаемый файл становится пустым.
Я понимаю, что OutputStream записывается в асинхронном режиме (Async включен в классе конфигурации).
Как я могу использовать этот сервис и полностью записать файл, как это происходит из репозитория, который я использую? (если возможно, используя Почтальон, только для тестирования)
Правильно ли я строю сервис?