Kotlin Multiplatform中使用Ktor无法下载文件问题排查
问题分析与解决
错误根源
报错io.ktor.client.call.NoTransformationFoundException: No transformation found: ByteBufferChannel -> JsonObject明确说明:代码尝试将文件下载的字节流(ByteBufferChannel)转换为JsonObject类型,但Ktor找不到对应的转换器。
从错误栈可定位问题出在MessageFlow.getDownloadLink方法第179行,该方法内部大概率错误地对返回二进制文件的请求调用了body<JsonObject>()这类Json解析方法,而目标链接返回的是application/octet-stream类型的文件(空白文本test.txt),并非Json数据。
修复步骤
- 修正响应解析逻辑:确保
getDownloadLink方法针对文件下载请求使用正确的解析方式——流式处理用bodyAsChannel()获取ByteReadChannel,直接获取字节用body<ByteArray>(),绝对不能对二进制文件响应调用Json解析方法。 - 检查请求配置:确认请求未错误设置
Accept头为application/json,同时确保HttpClient未强制全局Json转换。 - 校验完整流程:你的测试代码片段本身逻辑正确,但需确保后续流程中没有将字节流对象错误传入需要Json的处理逻辑中。
内容的提问来源于stack exchange,提问作者Demipho
相关产品推荐
相关产品推荐

