Retrofit2.0:上传图片到PHP

来源:互联网 发布:齐鲁软件大赛奖金 编辑:程序博客网 时间:2024/05/22 12:41

上传图片到PHP

关于Retrofit2.0+Rxjava,道长先只说一下上传图片到PHP,至于其他的可以先看一下CaBiao的博客,这里面关于Retrofit2.0+Rxjava的使用讲的比较详细。
添加接口:

    /**     * 上传图片     * @return     */    @Multipart    @POST(UrlContanier.ImgUpFile)    Observable<HttpResult<UploadPicResponse>> uploadPicData(@PartMap Map<String, RequestBody> reqMessageBody);


实现上传方法:
道长这里把每一个请求参数实例化为RequestBody,然后把实例化后的实体放到Map

 public void uploadPicData(String picPath){        String fileKey = "files";        Map<String, RequestBody> clubUploadPicRequest = getBasePhpRequest();        RequestBody headpic = RequestBody.create(MediaType.parse("multipart/form-data"), new File(picPath));        fileKey += "\"; filename=\"" + new File(picPath).getName();        clubUploadPicRequest.put(fileKey, headpic);        RequestBody type = RequestBody.create(MediaType.parse("form-data"), "3");        clubUploadPicRequest.put("type" , type);        RequestBody liveid = RequestBody.create(MediaType.parse("form-data"), activeid);        clubUploadPicRequest.put("liveid" , liveid);        appAction.uploadPicData(new CallBack<UploadPicResponse>(ClubActivityDetailActivity.this) {            @Override            public void onCompleted() {                SimpleHUD.dismiss();            }            @Override            public void onError(Throwable e) {                super.onError(e);                SimpleHUD.dismiss();            }            @Override            public void onNext(UploadPicResponse uploadPicResponse) {                String json = JsonUtil.GsonString(uploadPicResponse);                LogHelper.v("lee", "uploadPicResponse:" + json);            }        }, clubUploadPicRequest);    }    public Map<String, RequestBody> getBasePhpRequest(){        Map<String, RequestBody> request = new HashMap<>();        RequestBody userid = RequestBody.create(MediaType.parse("form-data"), PreferenceHelper.get(ClubActivityDetailActivity.this, PreferenceHelper.PREFERENCE_LOGIN, "userid", 0) + "");        request.put("userid", userid);        RequestBody accessToken = RequestBody.create(MediaType.parse("form-data"),Config.ACCESSTOKEN);        request.put("accessToken",accessToken);        RequestBody clientVersion = RequestBody.create(MediaType.parse("form-data"),Config.CLIENTVERSION);        request.put("clientVersion",clientVersion);        RequestBody clientName = RequestBody.create(MediaType.parse("form-data"),Config.CLIENTNAME);        request.put("clientName",clientName);        RequestBody version = RequestBody.create(MediaType.parse("form-data"),Config.HTTP_VERSION);        request.put("version",version);        return request;    }


这里要注意两点:
1.封装图片的实体的代码为:

RequestBody headpic = RequestBody.create(MediaType.parse("multipart/form-data"), new File(picPath));        fileKey += "\"; filename=\"" + new File(picPath).getName();        clubUploadPicRequest.put(fileKey, headpic);

其中fileKey的拼接是不可改动的,如果改动的话会导致上传不成功。

2.封装其他请求参数的实体的代码为:

RequestBody userid = RequestBody.create(MediaType.parse("form-data"), PreferenceHelper.get(ClubActivityDetailActivity.this, PreferenceHelper.PREFERENCE_LOGIN, "userid", 0) + "");        request.put("userid", userid);

如果请求参数不是固定值,最好把参数设置为全局变量,否则会实例化RequestBody不成功。希望这篇博客能为你提供一些帮助。


1 0
原创粉丝点击