改造2多部分请求

我正在将现有的代码库迁移到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> 

在改造1.9我使用TypedString和TypedFile的请求参数,现在似乎需要使用OkHttp RequestBody,但我必须失去一些东西,因为请求不能正确执行。

我终于明白了。 我的网络服务需要文件上传的文件名。 这似乎是新的改进2中正在进行的工作支持,但可以通过将其添加到指定的参数定义来解决问题。

更多细节在这里: https : //github.com/square/retrofit/issues/1140

有一点不同的是, TypedString将有一个“text / plain; charset = UTF-8”的Content-Type ,其中你没有为你的audioDuration参数设置一个Context-Type 。 尝试将其设置为text/plain以获得与TypedString相同的行为(字符集将默认设置为utf-8)。

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

如果这不起作用,则需要提供有关“请求无法正确执行”的更多信息。 您尝试复制的工作请求也会有所帮助。