Java 如何将ByteBuffer的流量转换为弹簧体插入器
我有一个用例,可以从s3读取文件,并用java发布到rest服务。 对于实现,我尝试使用awssdk S3API读取返回Flux的文件,然后使用Spring WebClient发布到rest服务 根据我的探索,spring WebClient需要BodyInserter,可以使用BodyInserters.fromDataBuffers准备BodyInserter。我不知道如何正确地将通量转换为通量并调用WebClient exchangeJava 如何将ByteBuffer的流量转换为弹簧体插入器,java,spring-webflux,reactive,Java,Spring Webflux,Reactive,我有一个用例,可以从s3读取文件,并用java发布到rest服务。 对于实现,我尝试使用awssdk S3API读取返回Flux的文件,然后使用Spring WebClient发布到rest服务 根据我的探索,spring WebClient需要BodyInserter,可以使用BodyInserters.fromDataBuffers准备BodyInserter。我不知道如何正确地将通量转换为通量并调用WebClient exchange Flux<ByteBuffer> byte
Flux<ByteBuffer> byteBufferFlux = getS3File(key);
Flux<DataBuffer> dataBufferFlux= byteBufferFlux.map(byteBuffer -> {
?????????????Convert bytebuffer to data buffer ??????
return dataBuffer;
});
BodyInserter<Flux<DataBuffer>, ReactiveHttpOutputMessage> inserter = BodyInserters.fromDataBuffers(dataBufferFlux);
如何实现这一点有什么建议吗?您可以使用DefaultDataBuffer进行转换,您可以通过DefaultDataBufferFactory创建DefaultDataBuffer
然后可以将通量直接传递到其中,同时指定要使用的类
WebClient.create("http://someUrl")
.post()
.uri("/someUri")
.body(getS3File(key),ByteBuffer.class)
您可能不需要dataBufferFlux,并且应该能够将该流量写入rest端点。试试这个:
Flux<ByteBuffer> byteBufferFlux = getS3File(key);
BodyInserter<Flux<ByteBuffer>, ReactiveHttpOutputMessage> = BodyInserters.fromPublisher(byteBufferFlux, ByteBuffer.class);
我很惊讶用谷歌搜索答案有多么困难。面对同样的问题,你的解决方案帮助很大,谢谢!
WebClient.create("http://someUrl")
.post()
.uri("/someUri")
.body(getS3File(key),ByteBuffer.class)
Flux<ByteBuffer> byteBufferFlux = getS3File(key);
BodyInserter<Flux<ByteBuffer>, ReactiveHttpOutputMessage> = BodyInserters.fromPublisher(byteBufferFlux, ByteBuffer.class);