Retrofit2 使用,文件上传

引入
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'//Gson库

文件上传
接口方法定义:
@Multipart
    @POST("/api/v1/face/add")
    Call<FaceResponse> upLoadPicture(@PartMap Map<String,
okhttp3. RequestBody> params,@Part MultipartBody.Part part);
RequestBody要使用okhttp3包下的,使用retrofit2下的时,传的参数值为空了。 params用于上传普通参数,part用于上传文件。

功能实现:
public static  void addFace(String name, String imagefile, final HCBaseHttp.CallBack<com.cloudminds.hc.cloudService.bean.FaceResponse> callBack){
        HCHttpEngine.startReq(new HCHttpFace(imagefile,name), CloudServiceContants.FACEHTTP,getCallback(callBack));
    }


public static void startReq(HCBaseHttp req, String baseUrl, Callback callback){
        Log.e(TAG, "startReq: " +req.toString()+"      "+baseUrl);
        Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        Call call = req.getCall(retrofit);
        call.enqueue(callback);
        Log.e(TAG, "startReq: enqueue" );
    }

private static <D> Callback<D> getCallback(final HCBaseHttp.CallBack<D> callBack) {
        return new Callback<D>(){

            @Override
            public void onResponse(Call<D> call, Response<D> response) {
                Log.e(TAG, "onResponse: " +response.toString());
                if(response.body()!=null) {
                    Log.e(TAG, "onResponse: " + response.body());
                    callBack.onResponse(response.body());
//
                }else{
                    callBack.onFailure("response.body()=null");
                }
            }

            @Override
            public void onFailure(Call<D> call, Throwable t) {
                Log.e(TAG, "onFailure: "+t.getMessage() );
                callBack.onFailure(t.getMessage());
            }
        };
    }



public abstract class HCBaseHttp {
    abstract Call getCall(Retrofit retrofit);
    public interface CallBack<S>{
        void onResponse(S data);
        void onFailure(String msg);
    }
}

public class HCHttpFace extends HCBaseHttp {

    String imagefile;
    String name;
    private String TAG="HCApiClient";

    public HCHttpFace(String imagefile, String name) {
        this.imagefile = imagefile;
        this.name = name;
    }

    public String getImagefile() {
        return imagefile;
    }

    public void setImagefile(String imagefile) {
        this.imagefile = imagefile;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    Call getCall(Retrofit retrofit) {
        RequestService requestService = retrofit.create(RequestService.class);
        String gson = new Gson().toJson(this);
        Log.e(TAG, "getCall: "+gson );
        Map<String, okhttp3.RequestBody> params = new HashMap<String, okhttp3.RequestBody>();
            File file = new File(imagefile);
        okhttp3.RequestBody fileRequestBody = okhttp3.RequestBody.create(okhttp3.MediaType.parse("application/octet-stream"), file);

        MultipartBody.Part partFile = MultipartBody.Part.createFormData("imagefile","aaa",fileRequestBody);
        okhttp3.RequestBody o3requestBody = okhttp3.RequestBody.create(okhttp3.MediaType.parse("multipart/form-data"),CloudServiceContants.app_key);
        params.put("app_key",o3requestBody);
        o3requestBody = okhttp3.RequestBody.create(okhttp3.MediaType.parse("multipart/form-data"),CloudServiceContants.app_secret);
        params.put("app_secret",o3requestBody);
         o3requestBody = okhttp3.RequestBody.create(okhttp3.MediaType.parse("multipart/form-data"),CloudServiceContants.faceset_id);
        params.put("faceset_id",o3requestBody);
        o3requestBody = okhttp3.RequestBody.create(okhttp3.MediaType.parse("multipart/form-data"),name);
        params.put("name",o3requestBody);
         o3requestBody = okhttp3.RequestBody.create(okhttp3.MediaType.parse("multipart/form-data"),file.getName());
        params.put("imagename",o3requestBody);
        Call<FaceResponse> call = requestService.upLoadPicture(params,partFile);
        return call;
    }

    @Override
    public String toString() {
        return "HCHttpFace{" +
                "imagefile='" + imagefile + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Retrofit2是一个流行的Android网络框架,可以通过注解和动态代理来简化网络请求的步骤。在使用Retrofit2进行文件上传时,可以使用@Multipart注解和@PartMap注解来实现多文件上传。\[1\] 具体的实现步骤如下: 1. 在Retrofit接口中使用@Multipart注解标记该方法为多部分请求。 2. 使用@POST注解指定上传文件的URL。 3. 使用@PartMap注解将文件参数以Map的形式传递给方法。 4. 在Map中,键是参数的名称,值是RequestBody类型的文件内容。 例如,可以使用以下代码来实现文件上传: ``` @Multipart @POST("upload") Observable<String> uploadFiles(@PartMap Map<String, RequestBody> files); ``` 其中,files是一个Map,键是文件参数的名称,值是RequestBody类型的文件内容。 Retrofit2之所以被广泛使用,是因为它能够根据注解封装网络请求,并通过转化器将原始的HTTP响应内容转化为我们需要的对象。这使得使用Retrofit2非常方便。\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Retrofit2 multpart多文件上传详解](https://blog.csdn.net/jdsjlzx/article/details/51649382)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [retrofit2上传文件总结](https://blog.csdn.net/u011323666/article/details/52288753)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值