Kotlin (Ktor) 请求 class 多部分表单数据

Kotlin (Ktor) request class for multipart form data

我想创建一个请求 class 来收集所有部分(文件和项目)并对其进行验证,这类似于我在 json 请求中放置的示例(下面)。

请求 JSON 可序列化示例 CLASS

import kotlinx.serialization.Serializable

@Serializable
class CreateGroupRequest(
    val name: String,
    val description: String? = null,
    val visibility: String? = "PUBLIC"
)

处理JSON请求示例

route("create") {
                post {
                    val request = call.receive<CreateGroupRequest>()
                    try {
                        //CODE
                        call.respond(HttpStatusCode.OK)
                    } catch (e: SharedDomainException) {
                        call.respond(HttpStatusCode(e.errorCode, e.errorMessage))
                    }
                }
            }

例如,我的意思是,在这种情况下,我想更改它,因为群组也有我要上传的个人资料照片,或者在其他情况下,帖子域有文本、作者和多张图片.

我已经阅读了这篇文章 ,但我看不出如何使通用 class 读取多部分请求而不必在每个处理程序中重复代码。

那么,有谁知道我如何在共享 class 中读取请求多部分表单数据正文并使用 kotlin/ktor 对其进行验证?

对于MultiPartData对象,原则上可以使用ContentNegotiation and register a content converter for the multipart/form-data Content-type. In the convertForReceive method you can use CIOMultipartDataBase to parse multipart data and then deserialize it using kotlinx.serialization library. For deserialize method call you need to provide a decoder,需要实现。

上述方法可行,但对于具有大型二进制正文的部分来说效率非常低,因为 HTTP 消息中的部分一个接一个地传递,因此所有部分都将被急切地读入内存。