Ktor MultiPartFormDataContent 请求

问题描述 投票:0回答:1

您好,我有 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"))
android networking ktor ktor-client
1个回答
0
投票

这是必要的。 OkHttpClient 就是这样做的方法。

© www.soinside.com 2019 - 2024. All rights reserved.