Retrofit 2 requestes multipartes

Estoy migrando mi base de código existente a Retrofit 2, pero tengo problemas para entender la nueva syntax para requestes de varias partes. También estoy usando Kotlin, aunque aparte de algunos cambios en la syntax, creo que no debería importar para esta pregunta en particular.

Esto es lo que tengo ahora:

val audioDuration = RequestBody.create(null, audioDuration.toString()) val file = RequestBody.create(MediaType.parse("audio/mp4"), File(context.filesDir, filename).absoluteFile) sendAudioChunk(audioDuration, file).enqueue(callback) 

Y aquí está la definición de la API:

 @Multipart @POST("path_to_request") fun sendAudioChunk(@Part("duration") audioDuration: RequestBody, @Part("audio") audioBlob: RequestBody) : Call<ResponseObject> 

En Retrofit 1.9 utilicé TypedString y TypedFile para los parameters de request, y ahora parece que es necesario utilizar RequestBody de OkHttp, pero me falta algo porque la request no se ejecuta correctamente.

Finalmente lo descubrí. Mi service web espera un nombre de file para la carga de files. Esto parece ser un soporte de trabajo en progreso en la nueva Retrofit 2, pero es posible eludir el problema agregándolo a la definición del parámetro nombrado.

Más detalles aquí: https://github.com/square/retrofit/issues/1140

Una cosa que es diferente es que TypedString tendría un Content-Type de Content-Type de "text / plain; charset = UTF-8", donde no está configurando un tipo de Context-Type para su parámetro audioDuration . Intente configurarlo en text/plain para get el mismo comportamiento que TypedString (charset se establecerá en utf-8 de forma pnetworkingeterminada).

 val audioDuration = RequestBody.create(MediaType.parse("text/plain"), audioDuration.toString()) 

Si eso no funciona, deberá proporcionar más información sobre cómo la "request no se ejecuta correctamente". Una request de trabajo que intentas replicar también sería útil.