继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android中 使用okhttp3上传图片数组遇到的坑

汪汪一只猫
关注TA
已关注
手记 575
粉丝 129
获赞 718

以下是自己的一个小心得

 由于以前做多张图片上传到后台服务起的时候,自己前端的做法都是基本都是 使用 :1,将本地获取到的照片进行base64转换之后以某个符号分隔进行拼接传到后台。2,或者使用list<file> list 上传整个集合。

由于okhttp3 封装好的方法不支持直接上传数组对象 ,所以需要自己处理一下,

//  可以直接使用下面方法

    private void postDataWithParame() {

        

        OkHttpClient client = new OkHttpClient();

        MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);

        builder.addFormDataPart("token",token);//传递键值对参数

        builder.addFormDataPart("a","create_discover");//传递键值对参数

        builder.addFormDataPart("remarks","4545454");//传递键值对参数

        for (int i = 0; i < defList.size(); i++) {

            builder.addFormDataPart("thumb[]",null, RequestBody.create(MediaType.parse("image/jpeg; charset=utf-8"),Tools.imageToBase64(defList.get(i))));

        }

        Request request = new Request.Builder()//创建Request 对象。

                .url(url)

                .post(builder.build())//传递请求体

                .build();

        client.newCall(request).enqueue(new Callback() {

            @Override

            public void onFailure(Call call, IOException e) {

            }

            @Override

            public void onResponse(Call call, Response response) throws IOException {

                Log.d("AddAlbumActivity", response.body().string());

            }

        });

    }

  最需要注意的是这里

    for (int i = 0; i < defList.size(); i++) { // 循环添加图片

            builder.addFormDataPart("thumb[]",null, RequestBody.create(MediaType.parse("image/jpeg; charset=utf-8"),Tools.imageToBase64(defList.get(i))));

        }

这里上传的是php服务器 thumb 为要上传的参数key 需要在后面加上[] 才能被识别是一个数组对象 ,之前没有加上这个符号的时候怎么传都只有一张图片 加上之后就会被成功解析数组所对应的值。

  List<String> defList = new ArrayList<>();

defList .add("图片的资源路径");

defList .add("图片的资源路径");

原文链接:http://www.apkbus.com/blog-398810-77287.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP