改造 android @Multipart 删除默认值 headers
Retrofit for android @Multipart remove default headers
发出@Multipart 请求会为每个部分添加这些默认值headers(Content-Transfer-Encoding、Content-Type),有什么方法可以删除它们吗?
//REQUEST BODY
--25d35373-d2c3-46a3-969f-f5a1fd5f781a
Content-Disposition: form-data; name="client_id"
Content-Transfer-Encoding: binary <-- remove this one
Content-Type: application/json; charset=UTF-8 <-- remove this one
Content-Length: 34
"40ccfee680a844780a41fbe23ea89934"
//
注意:我无法访问服务器,所以我无法让服务器接受这些 headers。
您可以通过这种方式自行构建 multipart body(kotlin 代码,但同样的想法可以用 java 表达):
val mpart = MultipartBody.Builder()
.addFormDataPart("param", paramValue)
.addPart(null, someRequestBody).build() // <-- (*) see explanation below
//thus, service method should looks like this:
@POST("upload/endpoint")
fun upload(@Body parts: MultipartBody)
(*) - 这是 addPart(headers: Headers, reqBody: RequestBody)
方法,当您将 null
传递给 headers arg 时,这将删除除 Content-Length:
[= 之外的所有 headers 14=]
@POST(...)
suspend fun updateImage(@Body Body: RequestBody): Response<ResponseBody>
val uploadFile = File(...)
val bodyFile = uploadFile.asRequestBody("image/*".toMediaType())
val bodyBuilder = MultipartBody.Builder()
bodyBuilder.setType(MultipartBody.FORM)
bodyBuilder.addFormDataPart("img", uploadFile.name, bodyFile)
api.updateImage(bodyBuilder.build())
改造+协程
发出@Multipart 请求会为每个部分添加这些默认值headers(Content-Transfer-Encoding、Content-Type),有什么方法可以删除它们吗?
//REQUEST BODY
--25d35373-d2c3-46a3-969f-f5a1fd5f781a
Content-Disposition: form-data; name="client_id"
Content-Transfer-Encoding: binary <-- remove this one
Content-Type: application/json; charset=UTF-8 <-- remove this one
Content-Length: 34
"40ccfee680a844780a41fbe23ea89934"
//
注意:我无法访问服务器,所以我无法让服务器接受这些 headers。
您可以通过这种方式自行构建 multipart body(kotlin 代码,但同样的想法可以用 java 表达):
val mpart = MultipartBody.Builder()
.addFormDataPart("param", paramValue)
.addPart(null, someRequestBody).build() // <-- (*) see explanation below
//thus, service method should looks like this:
@POST("upload/endpoint")
fun upload(@Body parts: MultipartBody)
(*) - 这是 addPart(headers: Headers, reqBody: RequestBody)
方法,当您将 null
传递给 headers arg 时,这将删除除 Content-Length:
[= 之外的所有 headers 14=]
@POST(...)
suspend fun updateImage(@Body Body: RequestBody): Response<ResponseBody>
val uploadFile = File(...)
val bodyFile = uploadFile.asRequestBody("image/*".toMediaType())
val bodyBuilder = MultipartBody.Builder()
bodyBuilder.setType(MultipartBody.FORM)
bodyBuilder.addFormDataPart("img", uploadFile.name, bodyFile)
api.updateImage(bodyBuilder.build())
改造+协程