Retrofit实现上传文件(上传多个文件)

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载,违者必究。 https://blog.csdn.net/Cricket_7/article/details/89668235

1,添加依赖

compile 'com.squareup.retrofit2:retrofit:2.1.0'

//依赖和retrofit对应的gson解析类库,配置了就拥有了json解析的功能

compile 'com.squareup.retrofit2:converter-gson:2.0.2'

2,Retrofit 上传文件

【1】定义访问注释接口

  • 接口文档

  • 定义访问注释接口

//上传头像的业务方法

@Multipart      //以多块的格式开上传文件

@POST("upload")

Call<Result> uploadAvatar(@Part("file") RequestBody reqBody);





//批量上传文件

@Multipart      //以多块的格式开上传文件

@POST("uploadMulti")

Call<Result> uploadAvatars(@PartMap HashMap<String,RequestBody> map);

【2】调用RetrofitHelper获取对象

  • 服务器接口需要我们传入一个file字段。但是单独传一个file 字段会报错

  • 抓包看到我们http需要访问的字段名

  • MediaType.parse("image/jpeg") 中构建的字段问一下服务器需要哪些字段

final String FILE_PART = "file\"; filename=\"";

private void uploadMulti() {

    //1.构造map

    HashMap<String, RequestBody> map = new HashMap<>();

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

    map.put(FILE_PART + file.getName(),createImageBody(file));

    Call<Result> uploadCall = RetrofitHelper.create().getxiaoshuaiApi().uploadAvatars(map);

    uploadCall.enqueue(new Callback<Result>() {

        @Override

        public void onResponse(Call<Result> call, Response<Result> response) {

            Result result = response.body();

            tvResult.setText(result.msg);

        }

        @Override

        public void onFailure(Call<Result> call, Throwable t) {





        }

    });

}





public RequestBody createImageBody(File file){

    RequestBody fileBody = RequestBody.create(MediaType.parse("image/jpeg"),file);

    return fileBody;

}
  • RequestBody.create ,可以构建多个类型,byte 或者是file

猜你喜欢

转载自blog.csdn.net/Cricket_7/article/details/89668235
今日推荐