我正在将现有代码库迁移到Retrofit 2,但在理解Multipart请求的新语法时遇到一些麻烦。我也在使用Kotlin,虽然除了一些语法更改之外,我认为这对于这个特定的问题无关紧要。
这就是我现在所拥有的:
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)
以下是API的定义:
@Multipart
@POST("path_to_request")
fun sendAudioChunk(@Part("duration") audioDuration: RequestBody,
@Part("audio") audioBlob: RequestBody) : Call<ResponseObject>
On Retrofit 1.9我使用TypedString和TypedFile作为请求参数,现在似乎需要使用OkHttp的RequestBody,但由于请求没有正确执行,我必须遗漏一些东西。
答案 0 :(得分:3)
我最终弄明白了。我的网络服务需要一个文件上传文件名。这似乎是新Retrofit 2中的一项正在进行的工作支持,但可以通过将其添加到命名参数定义来解决问题。
答案 1 :(得分:1)
有一点不同的是,TypedString
会有Content-Type
的“text / plain; charset = UTF-8”,你根本就没有设置Context-Type
您的audioDuration
参数。尝试将其设置为text/plain
以获得与TypedString
相同的行为(默认情况下,charset将设置为utf-8)。
val audioDuration = RequestBody.create(MediaType.parse("text/plain"), audioDuration.toString())
如果这不起作用,您需要提供有关“请求无法正确执行”的更多信息。您尝试复制的工作请求也会有所帮助。