Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将ByteBuffer的流量转换为弹簧体插入器_Java_Spring Webflux_Reactive - Fatal编程技术网

Java 如何将ByteBuffer的流量转换为弹簧体插入器

Java 如何将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

我有一个用例,可以从s3读取文件,并用java发布到rest服务。 对于实现,我尝试使用awssdk S3API读取返回Flux的文件,然后使用Spring WebClient发布到rest服务

根据我的探索,spring WebClient需要BodyInserter,可以使用BodyInserters.fromDataBuffers准备BodyInserter。我不知道如何正确地将通量转换为通量并调用WebClient exchange

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);