Kotlin Ktor中part.readBytes()在处理multipart请求时如何正确使用?

2026-04-29 13:242阅读0评论SEO问题
  • 内容介绍
  • 相关推荐

本文共计715个文字,预计阅读时间需要3分钟。

Kotlin Ktor中part.readBytes()在处理multipart请求时如何正确使用?

在处理《直接对任意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分钟。

Kotlin Ktor中part.readBytes()在处理multipart请求时如何正确使用?

在处理《直接对任意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

阅读全文