Kotlin Ktor中part.readBytes()在处理multipart请求时如何正确使用?
- 内容介绍
- 相关推荐
本文共计715个文字,预计阅读时间需要3分钟。
在处理《直接对任意PartData调用readBytes()会抛出ClassCastException,因为只有BinaryItem才支持该方法。表格中的文本字段(如name=)需要特别处理。
常见错误现象:java.lang.ClassCastException: class io.ktor.http.content.PartData$FormItem cannot be cast to class io.ktor.http.content.PartData$BinaryItem
- 用
when分支区分处理类型,不要用is硬转 -
BinaryItem对应文件上传;FormItem对应普通字段;Empty可忽略 - 如果只关心文件,跳过非
BinaryItem即可,不用报错中断整个请求
part.readBytes()会把整个文件加载进内存,大文件容易OOM
readBytes()是同步阻塞方法,它会一次性把InputStream读完并返回ByteArray。上传100MB文件就会分配100MB堆内存,Ktor默认不设限制,生产环境极易触发OutOfMemoryError。
本文共计715个文字,预计阅读时间需要3分钟。
在处理《直接对任意PartData调用readBytes()会抛出ClassCastException,因为只有BinaryItem才支持该方法。表格中的文本字段(如name=)需要特别处理。
常见错误现象:java.lang.ClassCastException: class io.ktor.http.content.PartData$FormItem cannot be cast to class io.ktor.http.content.PartData$BinaryItem
- 用
when分支区分处理类型,不要用is硬转 -
BinaryItem对应文件上传;FormItem对应普通字段;Empty可忽略 - 如果只关心文件,跳过非
BinaryItem即可,不用报错中断整个请求
part.readBytes()会把整个文件加载进内存,大文件容易OOM
readBytes()是同步阻塞方法,它会一次性把InputStream读完并返回ByteArray。上传100MB文件就会分配100MB堆内存,Ktor默认不设限制,生产环境极易触发OutOfMemoryError。

