我想实现一个Liferay,它从一个单独的服务器下载一个~1GB文件,并将它提供给点击该链接的网站访问者。
该文件必须以memory-efficient方式流(因此不会将所有内容加载到内存中),用户在单击后不久就会看到下载的进度(因此不会将所有内容存储到本地磁盘上)。
我必须使用WebClient,因为它似乎是在Liferay 7 (RestTemplate将是已弃用)中提出web请求的标准。
我开始写这样的东西,灵感来自于javadoc的一个例子
Mono<DataBuffer> bodyMono = client.get()
.uri("https://theotherserver.com/file94875.pdf")
.retrieve()
.bodyToMono(DataBuffer.class);..。我将通过PortletResponseUtil.sendFile将其输入到portlet的MVCResourceCommand.serveResource()中,后者需要一个java.io.InputStream。
不幸的是,WebClient给了我一个Mono<DataBuffer> (或Flux<DataBuffer>),另一个答案是https://stackoverflow.com/a/48055611/226958。
实现这一点的最有效和最了解WebClient的方法是什么?
发布于 2019-02-12 12:57:53
对于Liferay,文档声明您可以使用....getPortletOutputStream()检索OutputStream。在设置contentlengh (所以浏览器知道期望有多大)之后,您可以使用以下命令:可供ServerResponse使用
将数据写入OutputStream
https://stackoverflow.com/questions/54647990
复制相似问题