ios 将UIImage作为二进制数据发送到AWS API Gateway

kkih6yb8  于 2023-05-23  发布在  iOS
关注(0)|答案(1)|浏览(199)

我有一个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端运行顺利。在这个问题上任何帮助都是非常感谢的,谢谢

mum43rcc

mum43rcc1#

发现了问题:事实证明,我选择从Android Studio的模拟器图库中裁剪和发送的第一张照片似乎被窃听,甚至在裁剪时显示颠倒。选择任何其他照片似乎都可以正常工作,并且裁剪的版本会正确发送:/

相关问题