安卓 okhttp上传base64图片数据并携带参数

闲下来的时候就想捣鼓捣鼓接手的代码,前几天就抽空捣鼓捣鼓了上传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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值