Retrofit+RxJava上传文件和头像

compile 'io.reactivex.rxjava2:rxjava:2.0.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'

    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'


//自定义接口   存放uri串

public interface Getnet {
    public static String net= "https://www.zhaoapi.cn/";//retrofit使用的baseurl

//接口为  网络请求的方式  必须post

public interface TestService {
    //第一种方式上传头像
    @POST("file/upload")
    @Multipart
    Observable upload(@Part("uid") RequestBody uid, @Part MultipartBody.Part file);


    //第二种方式上传头像
    @POST("file/upload")
    @Multipart
    Observable upload2(@Query("uid") String uid, @Part MultipartBody.Part file);

}


 //工具包   解析json串的时候用
 
  
 
  
public class Util {
    private volatile static Util util=null;
    private Util(){

    }
    public static Util getmInstance(){
        if (util==null){
            synchronized (Util.class){
                if (util==null){
                    util=new Util();
                }
            }
        }
        return util;
    }
 
  
 
  
public Testservice getnetjson(String uri){ Retrofit retrofit =  new Retrofit.Builder().baseUrl(uri)
 
   
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create                                 
               .build();

             Testservive testservive = retrofit.create(Testservive.class);
return testservive;


//上传头像的代码

File f=new File(Environment.getExternalStorageDirectory(),"a.jpg");

Testservive testservive = Util.getnetjson(Getnet.net);

 //如果用第二种方式上传头像   可以不用写
   RequestBody uidBody = RequestBody.create(MediaType.parse("multipart/form-data"),"10134");

    //f为file路径
   MultipartBody.Part filePart = MultipartBody.Part.createFormData("file",f.getName(),RequestBody.create(
MediaType.parse("application/octet-stream"),f
   ));
   //第一种方式上传头像
   Observable upload = testService.upload(uidBody, filePart);

   //第二种方式  上传头像
//   Observable upload = apiService.upload2("10134", filePart);

   upload.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
           .subscribe(new Consumer() {
               @Override
               public void accept(FileResultBean fileResultBean) throws Exception {

               }
           });



你可能感兴趣的:(Retrofit+RxJava上传文件和头像)