Android开发使用retrofit上传文件和多个参数一起时失败问题

  最近使用retrofit上传文件和参数时发现上传直接失败,于是查询各种资料发现是因为retrofit上传文件时底层限制问题,可是换作另外方法上传就可以了,记录下;

一,服务器让传递的参数和内容

这里写图片描述
二,retrofit接口内容

@Multipart
    @POST
    Call<WebResponseBean> uploadFile(@Url String url,@Part MultipartBody.Part file, @PartMap Map<String, RequestBody> params);

三,代码中调用封装图片上传工具


public class ImageUploadUtil {
    private ImageUploadUtil(){};
    public static void loadFile(final Context context,String url, File file, Map map){
        ApiService apiService = new RetrofitHttpUtil(context).getApiService();
        RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
        MultipartBody.Part body = MultipartBody.Part.createFormData("upload", file.getName(), requestFile);
       apiService.uploadFile(url,body,map)
               .enqueue(new Callback<WebResponseBean>() {
                   @Override
                   public void onResponse(Call<WebResponseBean> call, Response<WebResponseBean> response) {
                       String msg = response.body().msg;
                       ToastUtil.show(context,msg);
                   }

                   @Override
                   public void onFailure(Call<WebResponseBean> call, Throwable t) {

                   }
               });
    }
}

4,上传参数处理成retrofit底层需要的 “text/plain”

  private HashMap<String, RequestBody> setParams(String tag) {
        HashMap<String, RequestBody> map = new HashMap<>();
        map.put("uid", toRequestBody(uid));
        map.put("act", toRequestBody("UploadImage"));
        map.put("tag", toRequestBody(tag));
        return map;
    }

    private RequestBody toRequestBody(String value) {
        RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), value);
        return requestBody;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值