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

1,添加依赖

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

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

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

2,Retrofit 上传文件

【1】定义访问注释接口

  • 接口文档

Retrofit实现上传文件(上传多个文件)_第1张图片

 

  • 定义访问注释接口

//上传头像的业务方法

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

@POST("upload")

Call uploadAvatar(@Part("file") RequestBody reqBody);





//批量上传文件

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

@POST("uploadMulti")

Call uploadAvatars(@PartMap HashMap map);

【2】调用RetrofitHelper获取对象

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

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

  • Retrofit实现上传文件(上传多个文件)_第2张图片

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

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

private void uploadMulti() {

    //1.构造map

    HashMap map = new HashMap<>();

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

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

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

    uploadCall.enqueue(new Callback() {

        @Override

        public void onResponse(Call call, Response response) {

            Result result = response.body();

            tvResult.setText(result.msg);

        }

        @Override

        public void onFailure(Call call, Throwable t) {





        }

    });

}





public RequestBody createImageBody(File file){

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

    return fileBody;

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

Retrofit实现上传文件(上传多个文件)_第3张图片

你可能感兴趣的:(Android)