KMM项目iOS端发送UIImage至AWS API Gateway报Content-Type格式错误求助
解决方案
问题核心
iOS端Ktor在处理图片字节数据的请求时,Content-Type头未被正确识别,被默认逻辑覆盖为text; charset=utf-8,导致AWS API Gateway返回格式错误。
修复方法
方法1:手动通过Header指定Content-Type
移除contentType()函数调用,改用header()直接设置Content-Type,避免Ktor iOS端的默认行为干扰:
val response: HttpResponse = client.put( "$AWS_IMAGES_API_URL/$filename.png" ) { header(HttpHeaders.ContentType, "image/png") header("X-Api-Key", AWS_IMAGES_API_KEY) setBody(ByteArrayContent(bytes = pfp)) }
方法2:使用ByteReadChannel传递字节数据
替换ByteArrayContent为ByteReadChannel,确保Ktor正确识别二进制数据类型:
import io.ktor.utils.io.ByteReadChannel val response: HttpResponse = client.put( "$AWS_IMAGES_API_URL/$filename.png" ) { contentType(ContentType.Image.PNG) header("X-Api-Key", AWS_IMAGES_API_KEY) setBody(ByteReadChannel(pfp)) }
方法3:升级Ktor版本
若使用的Ktor版本较旧,iOS端可能存在Content-Type处理的兼容性bug。升级到最新稳定版(如2.3.x及以上),确保iOS与Android端的HTTP客户端逻辑一致。
验证步骤
- 检查字节数据完整性:对比
nsData.length和转换后的pfp.size,确认UIImage转PNG ByteArray的过程无数据丢失。 - 查看请求日志:添加Ktor Logging拦截器,打印实际发送的请求头,确认Content-Type是否为
image/png:
install(Logging) { level = LogLevel.HEADERS logger = object : Logger { override fun log(message: String) { println("[Ktor Log] $message") } } }
内容的提问来源于stack exchange,提问作者spikanor
相关产品推荐
相关产品推荐

