如何使用okhttp3发布请求消息包

时间:2021-01-15 10:22:22

标签: android okhttp

我想将 MIME 类型设置为“application/x-msgpack”,但 MultipartBody 的类型应为 MediaType,因此应用程序崩溃。

我如何提出请求?

val media = "multipart/form-data".toMediaTypeOrNull()
val boundary = System.currentTimeMillis().toString()
val file = MoshiPack().jsonToMsgpack("sample_file").readByteArray()

val requestBody: RequestBody = MultipartBody.Builder(boundary).setType("application/x-msgpack".toMediaTypeOrNull()!!)
        .addFormDataPart("file", "fileName", file.toRequestBody(media, 0, file.size))
        .build()

val request =  Request.Builder()
                .header("Content-Type", "application/json; charset=utf-8;multipart/form-data")
                .url(requestUrl)
                .post(paramData)
                .post(requestBody)
                .build()

okHttpClient.newCall(request)
implementation "com.squareup.okhttp3:okhttp:4.6.0"

1 个答案:

答案 0 :(得分:0)

对于您正在构建的每个请求,您应该只调用一次 post。省略 header("Content-Type", ...) 调用,因为它也有冲突。

https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/recipes/PostMultipart.java

有点像

var requestBody: RequestBody = MultipartBody.Builder()
  .setType(MultipartBody.FORM)
  .addFormDataPart(
    "file", "fileName",
    file.toRequestBody("application/x-msgpack".toMediaType())
  )
  .build()

var request: Request = Request.Builder()
  .header("Authorization", "Client-ID XXXX")
  .url("https://api.imgur.com/3/image")
  .post(requestBody)
  .build()
相关问题