You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Retrofit实现Postman式二进制音频文件上传?

解决Retrofit二进制音频上传问题

你之前用的@Multipart是多部分表单上传方式,而Postman的二进制上传是直接将文件内容作为请求体发送,两者格式不匹配,所以无法正常工作。按照以下步骤修改即可:

1. 修改Retrofit接口定义

移除@Multipart注解,改用@Body接收纯二进制请求体:

@POST("upload")
fun uploadAudio(
    @Body requestBody: RequestBody
): Call<ModelGetAudioUrl>

2. 构建二进制请求体

将音频文件转换为RequestBody,注意指定匹配音频格式的MediaType(比如MP3用audio/mpeg,WAV用audio/wav,根据你的实际文件格式调整):

// 替换为你的音频文件路径
val audioFile = File("/storage/emulated/0/your_audio.mp3")
// 匹配文件的MediaType,这里以MP3为例
val mediaType = MediaType.parse("audio/mpeg")
val requestBody = RequestBody.create(mediaType, audioFile)

3. 发起上传请求

调用修改后的接口完成上传:

val apiService = retrofit.create(YourApiInterface::class.java)
val call = apiService.uploadAudio(requestBody)

call.enqueue(object : Callback<ModelGetAudioUrl> {
    override fun onResponse(call: Call<ModelGetAudioUrl>, response: Response<ModelGetAudioUrl>) {
        if (response.isSuccessful) {
            // 上传成功,处理返回的ModelGetAudioUrl
        } else {
            // 处理错误响应
        }
    }

    override fun onFailure(call: Call<ModelGetAudioUrl>, t: Throwable) {
        // 处理网络或请求失败
    }
})

关键注意事项

  • MediaType必须匹配:如果服务器对音频类型有要求,一定要使用对应格式的MediaType,否则服务器可能无法识别上传的内容。
  • 无需设置额外的表单字段:二进制上传是直接把文件内容作为请求体,不需要像Multipart那样指定audio_file这类字段名。

内容的提问来源于stack exchange,提问作者Pooya Jannati Poor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:05:14