如何处理Spring WebClient获取application / octet-stream作为主体InputStream?

MeowCode:

我正在下载带有GET请求的文件。它们中的一些很大,因此我想将它们作为流获取,并按块读取字节,因为我可以对其进行处理,而从不读取内存中的整个文件。

org.springframework.web.reactive.function.client.WebClient看起来很合适,但是我遇到了“ UnsupportedMediaTypeException:不支持内容类型'application / octet-stream'。

这是一些简短的示例代码。

@Autowired WebClient.Builder webClientBuilder;
....
ClientResponse clientResponse = webClientBuilder.clientConnector(this.connector)
.build()
.get()
.uri(uri)
.accept(MediaType.APPLICATION_OCTET_STREAM)
.exhange()
.block(Duration.of(1, ChronoUnit.MINUTES));

// blows up here, inside of the body call
InputStream responseInputStream = clientResponse.body(BodyExtractors.toMono(InputStream.class)).block(Duration.of(1, ChronoUnit.MINUTES));

这是堆栈跟踪的一部分。

org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'application/octet-stream' not supported
   at org.springframework.web.reactive.function.BodyExtractors.lambda$readWithMessageReaders$20(BodyExtractors.java:254)
   at java.util.Optional.orElseGet(Optional.java:267)
   at org.springframework.web.reactive.function.BodyExtractors.readWithMessageReaders(BodyExtractors.java:250)
   at org.springframework.web.reactive.function.BodyExtractors.lambda$toMono$2(BodyExtractors.java:92)

......

我正在使用spring-webflux 5.0.7。

我确信spring webclient必须支持JSON以外的东西。我只是不知道该怎么做。救命?

JB Nizet:

不是专家,而是代替InputStream,可以使用以下命令获取一个Flux<byte[]>位置:每个已发布的数组将包含响应正文的一部分)

.get()
.uri(uri)
.accept(MediaType.APPLICATION_OCTET_STREAM)
.retrieve()
.bodyToFlux(byte[].class)

如果您愿意,也可以使用ByteBuffer代替byte[]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当 Content-Type = application/octet-stream 时,Android 如何处理改造响应?

节点:Express:如何处理application / octet-stream; charset =; UTF-8响应?

Spring WebClient:自动为主体计算HMAC签名并将其作为标头传递

如何通过 application/octet_stream 使用 jersey 生产和消费休息服务?

如何在Node JS中发送POST请求的Content-Type:application / octet-stream文件

如何查看具有application / octet-stream mime类型的二进制.log文件?

文件的mime类型为application / octet-stream失败

如何从cxf的WebClient获取检查的异常或如何处理异常

Spring Cloud Stream - 如何处理下游块?

如何处理来自WebClient的异步响应?

如何处理 Webclient 对 HttpServletResponse 的响应?

请求包含实体主体但没有 Content-Type 标头。推断的媒体类型 application/octet-stream 不支持此资源

用户上传Excel工作表-文件类型为application / octet-stream

显示文件:找不到媒体类型= application / octet-stream的MessageBodyReader

为什么我的控制器发送内容类型为“ application / octet-stream”?

我需要Content-Type:application / octet-stream来下载文件吗?

为什么MimetypesFileTypeMap总是为PNG文件返回“ application / octet-stream”?

无法在Symfony2中上传MIME类型为“ application / octet-stream”的图像

在flutter中将application / octet-stream转换为image / jpeg / png?

iOS上的Safari是否拒绝下载“ application / octet-stream”内容?

具有“ application / octet-stream”内容类型的Django文件上传

使用 Lambda 中的 HTML 文件创建一个 Bucket(想要 HTML,获取 Octet Stream)

如何处理 recyclerView 主体 clickListener

如何处理来自请求主体的图像

我如何在 spring 控制器中接收 json 作为主体?

Spring Boot RestController-PostMapping-将请求主体作为InputStream

使用类型为“Content-Type:application/octet-stream”的数据调用 Microsoft Azure Emotion API 时获取“状态代码:400 错误请求”

如何将x-genericbytedata-octet-stream转换为可读/可管理的某种格式

如何将左列作为导航器,将右列作为主体?