使用Retrofit上传图片到服务器踩坑

在项目中使用流的方式给服务器传递数据,网上大部分使用retrofit上传图片大致可以分为三种,一种是把参数和图片的数据一起封装为一个集合进行数据传递;第二种是使用map把所有的数据以键值对的形式进行传递;第三种是把图片和参数分开传递。
以下是以第三种方式进行上传图片:

    JSONObject reJson = new JSONObject();
        try {
            reJson.put("name", );
            reJson.put("password", );
            reJson.put("ID",);
            reJson.put("Token", );
        } catch (JSONException e) {
            e.printStackTrace();
        }
        File file = new File(path);
        RequestBody body = RequestBody.create(null, file);
        MultipartBody.Part part = MultipartBody.Part
                .createFormData("file", file.getName(), body);
        RetrofitRequest.getInstance().upLoadImage(reJson.toString(), part);
public void upLoadImage(String json, MultipartBody.Part part){
        RequestBody requestBody = RequestBody.create(
                MediaType.parse("multipart/form-data"),
                //加密json AESActivity.Encrypt(json)
                AESActivity.Encrypt(json));
        ServiceFactory.createService(UpLoadImageInterface.class)
                .upLoadImage(requestBody,part)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new CustomSubscribe<String>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onNext(String bean) {

                    }
                });
    }
//图片,注意传参时的("mmm")这个是随便传递,但是必须写
interface UpLoadImageInterface{
    @Multipart
    @POST("UpLoadImage")
    Observable<String> upLoadImage(@Part ("mmm")RequestBody requestBody,@Part MultipartBody.Part part);
}

以上是请求图片的全部流程。
其中对Content-type 可以参考https://blog.csdn.net/u010335298/article/details/51862624这篇文章

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值