You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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客户端逻辑一致。

验证步骤

  1. 检查字节数据完整性:对比nsData.length和转换后的pfp.size,确认UIImage转PNG ByteArray的过程无数据丢失。
  2. 查看请求日志:添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:52:43