使用 Retrofit 2.X 上传多文件,多表单

retrofit post请求上传表单和文件最重要的就是就是去构建RequestBody,今天为大家带来一种超级简单的上传方式

Body方式:

1、Retrofit接口RetrofitInterface

 @POST(URLConstant.URL_PATH)
    Flowable<UploadImgBean> upload(@Body RequestBody Body);

2、Retrofit的配置

private static RetrofitInterface getRetrofitInterface(String baseUrl) {
        if (retrofitInterface == null) {
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())
//                .addConverterFactory(ScalarsConverterFactory.create()) //string
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .build();
            retrofitInterface = retrofit.create(RetrofitInterface.class);
        }
        return retrofitInterface;
    }

3、构建body

 public static Flowable<UploadImgBean> upload(List<File> fileList) {
        //构建body
//addFormDataPart()第一个参数为表单名字,这是和后台约定好的
        MultipartBody.Builder builder = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("username", "name") 
                .addFormDataPart("phone", "phone")
      //注意,file是后台约定的参数,如果是多图,file[],如果是单张图片,file就行
        for (File file : fileList) {
            //这里上传的是多图
            builder.addFormDataPart("file[]", file.getName(), RequestBody.create(MediaType.parse("image/*"), file));
        }
        RequestBody requestBody = builder.build();
        return getRetrofitInterface(URLConstant.URL_BASE).upload(requestBody);
    }

4、开始执行上传

HttpUtils.upload(mUploadFileList)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new DisposableSubscriber<UploadImgBean>() {
                    @Override
                    public void onNext(UploadImgBean uploadImgBean) {
                        Log.i(TAG, "onNext: " ); 
                        }
                    }

                    @Override
                    public void onError(Throwable throwable) {
                        Log.i(TAG, "onError: --->" + throwable.getMessage());
                    }

                    @Override
                    public void onComplete() {
                        Log.i(TAG, "onComplete: ");
                    }
                });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 整体Retrofit内容如下: 1、Retrofit解析1之前哨站——理解RESTful2、Retrofit解析2...
    隔壁老李头阅读 15,191评论 4 39
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,756评论 25 709
  • Retrofit 实际上并不能说是一个网络请求框架,它其实是对 okHttp 这个网络请求框架在接口层面的封装,网...
    EmanLu阅读 1,083评论 0 2
  • 新年定下了一个小目标,完成我人生第一次半程马拉松。这目标也定的突然,本来只想跑个五公里意思意思,后来就在朋友怂恿下...
    沙粒微微阅读 850评论 0 0