闲下来的时候就想捣鼓捣鼓接手的代码,前几天就抽空捣鼓捣鼓了上传base64的代码(话说我真心觉得网络框架这一块还是okHttp,retrofit等等这些好,注解框架里面的网络框架真心不是很喜欢,个人观点不喜勿喷)
回到正题,刚开始弄的时候,我觉得就和平常使用的接口一样使用表单上传就可以了,然后我就在FormBody里面将ImgBase64(图片base64字符串)和ExtraData(额外参数)放入上传了,结果接口返回是调用成功了,可是服务器返回却是异常的。当时第一反应就是封装上传的数据出错了或者就是head设置问题,抓数据查看对比果然如此,上传的参数缺少Content-Disposition,Content-Type和Content-Length。查找资料发现可以使用okhttp多块请求体来包装上传,具体代码如下:
public void uploadImgByOkHttp( String postUrl,String imageBase64, int serviceType){ OkHttpClient okHttpClient = new OkHttpClient(); RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addPart( Headers.of("Content-Disposition", "form-data; name=\"fileBytes\""), RequestBody.create(MediaType.parse("text/plain;charset=ISO-8859-1"), imageBase64)) .addPart( Headers.of("Content-Disposition", "form-data; name=\"serviceType\""), RequestBody.create(MediaType.parse("application/json;charset=UTF-8"), serviceType+"")) .build(); Request request = new Request .Builder() .post(formBody) .url(postUrl) .build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String result = response.body().string(); } }); }
以此文记录一下自己走过的路,也希望可以帮助到有需要的人
最后推荐一下我看的这篇文章,我觉的写的挺详细的
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html