您好,我有 OkHttpClient 的表单数据请求,它正在工作,我想在 Ktor 中使用它,但是当我使用 Ktor 时出现错误。我在 Ktor 做错了什么?
OkHttpClient(工作中)
val client = OkHttpClient.Builder()
val body = MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("choice", null,
"John Wick".toRequestBody("application/json".toMediaType()))
.addFormDataPart("image",path,
File(path).asRequestBody("application/octet-stream".toMediaType()))
.build()
val request = Request.Builder()
.url("https://example.com")
.post(body)
.addHeader("Authorization", "Bearer key")
.build()
Ktor(不工作)
val httpResponse = client.submitForm {
url("https://example.com")
method = HttpMethod.Post
contentType(ContentType.MultiPart.FormData)
header("Authorization", "Bearer key")
body = MultiPartFormDataContent (
formData {
append("choice","John Wick", Headers.build {
append(HttpHeaders.ContentType, ContentType.Application.Json)
})
append("image",path,Headers.build {
append(HttpHeaders.ContentType, ContentType.Application.OctetStream)
})
}
)
}
编辑 而不是
append("image",path,Headers.build {
append(HttpHeaders.ContentType, ContentType.Application.OctetStream)
})
应该是
append("image", File(path).readBytes(), headersOf("Content-Disposition", "filename=$fileName"))
这是必要的。 OkHttpClient 就是这样做的方法。