我有一个Kotlin多平台项目,用户可以从图库中选择个人资料图片。在iOS中,选定的配置文件图片可以作为UIImage提供,然后我将其居中裁剪并转换为ByteArray,以使用Content-type image/png发送到AWS API Gateway。下面是iOS中UIImage -> ByteArray进程的Kotlin代码:
val croppedUIImage = uiImage.CGImage?.let { cgImage ->
val width = CGImageGetWidth(cgImage).toDouble()
val height = CGImageGetHeight(cgImage).toDouble()
val squareSize = minOf(width, height)
val x = (width - squareSize) / 2
val y = (height - squareSize) / 2
val rect = CGRectMake(x, y, squareSize, squareSize)
UIImage(CGImageCreateWithImageInRect(image = cgImage, rect = rect))
} ?: throw NullPointerException("Null CGImage")
val nsData = UIImagePNGRepresentation(croppedUIImage)
?: throw CharacterCodingException("Can't represent UIImage as PNG")
return ByteArray(nsData.length.toInt()).apply {
usePinned {
memcpy(it.addressOf(0), nsData.bytes, nsData.length)
}
}
然后,该ByteArray通过Ktor发送到API Gateway,如下所示:
val response: HttpResponse = client.put(
"$AWS_IMAGES_API_URL/$filename.png"
) {
contentType(ContentType.Image.PNG)
header("X-Api-Key", AWS_IMAGES_API_KEY)
setBody(
ByteArrayContent(
bytes = pfp,
contentType = ContentType.Image.PNG
)
)
}
但是,我得到了一个“Bad content-type format:text; charset=utf-8”执行此代码时。API网关似乎工作正常,因为一切都在Android端运行顺利。在这个问题上任何帮助都是非常感谢的,谢谢
1条答案
按热度按时间mum43rcc1#
发现了问题:事实证明,我选择从Android Studio的模拟器图库中裁剪和发送的第一张照片似乎被窃听,甚至在裁剪时显示颠倒。选择任何其他照片似乎都可以正常工作,并且裁剪的版本会正确发送:/