首页 > 解决方案 > 从 ServerRequest 中提取 InputStream

问题描述

我一直想从reactive.function.server.ServerRequest正文中提取 inputStream 但无济于事。到目前为止,我已经尝试了一些我在这里和其他地方找到的方法,最后又遇到了同样的问题,那就是 ->

鉴于此摘录:

在此处输入图像描述

经过检查,我得到了这个 inputStream,这显然是不对的:

在此处输入图像描述

在此处输入图像描述

PipedInputStream如果在我的情况下使用或实际上任何其他对象实际上可以实现这种转换,有什么想法吗?

标签: javaspringkotlinreactive-programmingspring-webflux

解决方案


一个DataBuffer罐头本身就可以完成这项工作。它有一个asInputStream方法。

但是,您可能会问错误的问题:

几乎所有的 InputStreams,当然还有来自网络连接的输入流,从根本上说是一个阻塞概念,并且您使用的是响应式,这意味着如果您阻塞,您的代码将从根本上被破坏

换句话说,作为一般经验法则,“我使用反应式!” 和“我想要一个输入流!” 是互斥的。你..不想要输入流。

如果必须的话,您需要一点异国情调的独角兽:一个保证不会阻塞的 InputStream。实际上只有一种方法可以创建这样一个野兽,即将所有数据泵入内存(希望它不是特别大量的数据!)然后创建一个输入流,只提供已经加载到内存中的字节:这样流不会阻塞。ByteArrayInputStream是这种流的一个例子。想必asInputStreamDataBuffer的方法是另外一种。


推荐阅读