WebFlux 框架对 request 的 InputStream 和 response 的 OutputStream 的使用

网友投稿 429 2022-11-19

WebFlux 框架对 request 的 InputStream 和 response 的 OutputStream 的使用

说到 WebFlux 就要提到和对比 Servlet,这样也是为了保留和尽量靠近传统代码的实现逻辑,所以最常用的就是对请求的输入流和响应的输出流处理。

在 Servlet 中获取输入流和输出流

HttpServletRequest request;HttpServletResponse response;InputStream inputStream = request.getInputStream();OutputStream outputStream = response.getOutputStream();

在 WebFlux 中获取输入流和输出流

1、OutputStream 输出流的应用代码片段示例

public Mono handle(ServerHttpResponse response) { DataBuffer dataBuffer = response.bufferFactory().allocateBuffer(); // 获得 OutputStream 的引用 OutputStream outputStream = dataBuffer.asOutputStream(); // 操作 outputStream 往里面写入数据 ...... ...... ...... // 将 dataBuffer 输出到 response return response.writeWith(Mono.just(dataBuffer));}

2、InputStream 输入流的应用代码片段示例

public Mono handle(ServerHttpRequest request) { return request.getBody().collect(ServerHttpConnection.InputStreamCollector::new, (t, dataBuffer) -> t.collectInputStream(dataBuffer.asInputStream())) .flatMap(inputStreamCollector -> { // 将输入流多个dataBuffer合并为一个InputStream后使用 InputStream requestInputStream = inputStreamCollector.getInputStream(); // 操作 inputStream 读取数据并处理 ...... ...... ...... // 这里返回 empty 只是示例,实际使用根据自己需求返回对应数据 return Mono.empty(); });}

其中合并多个 InputStream 使用 Java 的 SequenceInputStream 来处理,以下为内部类代码

static class InputStreamCollector { private InputStream is; public void collectInputStream(InputStream is) { if (this.is == null) this.is = is; this.is = new SequenceInputStream(this.is, is); } public InputStream getInputStream() { return this.is; }}

以上关于输入和输出流的代码可以应用于文件的上传和下载。

(END)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis实现批量修改
下一篇:液晶显示与单片机的接口与编程方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~