Я хочу реализовать портлет Liferay, который загружает файл ~ 1 ГБ с отдельного сервера и передает его посетителю веб-сайта, который щелкнул ссылку.
Файл должен быть потоковым с эффективным использованием памяти способом (поэтому загрузка всего в память не требуется) , и пользователь должен увидеть процесс загрузки вскоре после нажатия (поэтому нетхранение всего на локальном диске) .
Я должен использовать WebClient , потому что он кажется стандартным для выполнения веб-запросов в Liferay 7 (RestTemplate будет устаревшим ).
Я начал писать что-то вроде этого, вдохновленное примером из javadoc :
Mono<DataBuffer> bodyMono = client.get()
.uri("https://theotherserver.com/file94875.pdf")
.retrieve()
.bodyToMono(DataBuffer.class);
..., который я вставил бы в портлетMVCResourceCommand.serveResource()
через PortletResponseUtil.sendFile
, который ожидает java.io.InputStream
.
К сожалению, WebClient дает мне Mono<DataBuffer>
(или Flux<DataBuffer>
), а другой ответ утверждает, что реконструирует InputStreamпобеждает цель использования WebClient впервое место .
Какой самый эффективный и удобный способ реализовать это?