gpt4 book ai didi

java - 如何将 ByteBuffer 的 Flux 转换为 Spring BodyInserter

转载 作者:行者123 更新时间:2023-12-04 13:14:25 32 4
gpt4 key购买 nike

我有一个用例从 s3 读取文件并发布到 java 中的 rest 服务。
对于实现,我正在尝试使用 awssdk s3 API 读取返回 Flux<ByteBuffer> 的文件然后使用 Spring WebClient 发布到休息服务.

根据我的探索, Spring WebClient需要可以使用 BodyInserters.fromDataBuffers 准备的 BodyInserter .我无法弄清楚如何将 Flux 正确转换为 Flux 并调用 WebClient 交换;

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 创建

DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory();

Flux<DataBuffer> buffer = getS3File(key).map(dataBufferFactory::wrap);

BodyInserter<Flux<DataBuffer>, ReactiveHttpOutputMessage> inserter =
BodyInserters.fromDataBuffers(buffer);

您实际上根本不需要 BodyInserter,但如果使用 Webclient,您可以为 body() 使用以下方法签名

<T, P extends Publisher<T>> RequestHeadersSpec<?> body(P publisher, Class<T> elementClass);

然后你可以通过你的 Flux<ByteBuffer>直接进入,同时指定要使用的类

    WebClient.create("http://someUrl")
.post()
.uri("/someUri")
.body(getS3File(key),ByteBuffer.class)

关于java - 如何将 ByteBuffer 的 Flux 转换为 Spring BodyInserter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61689699/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com