spring 将通量转换< DataBuffer>为通量< ByteBuffer>

yruzcnhs  于 2023-06-04  发布在  Spring
关注(0)|答案(2)|浏览(376)

我正在使用Spring Webflux文件上传。从控制器我想上传文件在亚马逊S3桶。所以在控制器中我收到了以下对象

org.springframework.http.codec.multipart.FilePart

FilePart.content()中我可以得到

reactor.core.publisher.Flux<org.springframework.core.io.buffer.DataBuffer>

我的问题是如何将这个Flux<DataBuffer>转换为Flux<ByteBuffer>。我的意思是进入下面的对象

Flux<java.nio.ByteBuffer>
zkure5ic

zkure5ic1#

你可以使用org.springframework.core.io.buffer.DataBuffer#asByteBuffer()

Flux<java.nio.ByteBuffer> buffers = filePart.content()
    .map(DataBuffer::asByteBuffer);
7gcisfzg

7gcisfzg2#

answer of tmarwen中提到的asByteBuffer()方法自Sping Boot 3.x**(和Spring framework 6.x)以来已弃用**。添加了以下弃用警告:

不推荐

  • 从6.0开始,支持toByteBuffer(ByteBuffer)readableByteBuffers()writableByteBuffers()。*

如果您使用DataBuffer上传文件,则可以使用readableByteBuffers()。此方法返回一个Iterator<ByteBuffer>,因此您可以将其与Flux.fromIterable()一起使用:

Flux<ByteBuffer> byteBuffers = filePart
    .content()
    .flatMap(dataBuffer -> Flux.fromIterable(dataBuffer::readableByteBuffers));

注意事项readableByteBuffers()方法是在Sping Boot 3.0.3(Spring framework 6.0.5)中添加的,而自Spring Boot 3.0.0(Spring framework 6.0.0)以来存在弃用警告。这意味着您必须将项目升级到至少Sping Boot 3.0.3才能使其工作。

相关问题