如何在Retrofit POST接口中上传二进制类型文件?
Retrofit POST接口上传二进制文件实现方法
核心实现流程
Retrofit通过@Multipart注解支持表单式文件上传,以下是完整实现步骤:
定义Retrofit接口
用@Multipart标记接口方法,结合@POST指定接口路径,通过@Query传递URL参数,@Part传递文件部件:@Multipart @POST("user_trial_ocr") Call<YourResponseModel> getOcr(@Query("service") String serviceType, @Part MultipartBody.Part file);注意:需将
YourResponseModel替换为实际的接口响应实体类,避免使用无泛型的Call。构建文件请求体与Multipart部件
将本地文件转换为RequestBody时,要指定与文件匹配的媒体类型,再包装为MultipartBody.Part:// 假设file0是本地File对象 RequestBody requestFile = RequestBody.create(MediaType.parse("image/jpeg"), file0); // createFormData第一个参数是后端约定的表单字段名(比如"image"),第二个是文件名 MultipartBody.Part filePart = MultipartBody.Part.createFormData("image", file0.getName(), requestFile);原代码修正点:
createFormData第一个参数不应写媒体类型image/jpeg,而是后端接收文件的表单字段名;RequestBody的MediaType要对应文件实际类型,而非multipart/form-data。发起上传请求
通过Retrofit接口实例调用方法,执行异步请求并处理响应:Call<YourResponseModel> call = jsonPlaceHolderApi.getOcr("your_service_value", filePart); call.enqueue(new Callback<YourResponseModel>() { @Override public void onResponse(Call<YourResponseModel> call, Response<YourResponseModel> response) { // 处理成功响应逻辑 } @Override public void onFailure(Call<YourResponseModel> call, Throwable t) { // 处理请求失败逻辑 } });
关键注意事项
- 确保项目已正确引入Retrofit和OkHttp相关依赖
- 媒体类型需与上传文件匹配:比如PDF用
application/pdf,通用二进制文件用application/octet-stream - 后端接口需配置支持
multipart/form-data类型的请求
内容的提问来源于stack exchange,提问作者Thambi YT
相关产品推荐
相关产品推荐

