Загрузка большого файла весной MVC через веб-клиентJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Загрузка большого файла весной MVC через веб-клиент

Сообщение Anonymous »

Я пытаюсь загрузить большой файл с помощью веб-клиента Spring, не загружая весь файл в память. У меня есть такой метод обслуживания:

Код: Выделить всё

@Override
public StreamingResponseBody download() {
Flux dataBufferFlux = webClient.get()
.uri("/download")
.retrieve()
.bodyToFlux(DataBuffer.class);

StreamingResponseBody streamingResponseBody = outputStream -> {
DataBufferUtils.write(dataBufferFlux, outputStream)
.doOnNext(DataBufferUtils::release)
.blockLast();
};
return streamingResponseBody;
}
Кроме того, мы используем среду Spring MVC, поэтому я не могу использовать Flux в своих конечных точках. Код конечной точки:

Код: Выделить всё

@GetMapping(value = "/download", produces = "application/octet-stream")
public ResponseEntity down() {
var download = service.download();
return ResponseEntity.ok().contentType(MediaType.APPLICATION_OCTET_STREAM).body(download);
}
Но этот код не работает. Когда я вызываю свою конечную точку, я получаю пустое тело с типом контента 0. Я не могу загрузить все байты[] в память, потому что получу OOM.

Подробнее здесь: https://stackoverflow.com/questions/798 ... web-client
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»