首页 > 代码库 > 使用xutils发送POST请求,携带json和图片二进制文件数据获取服务器端返回json数据

使用xutils发送POST请求,携带json和图片二进制文件数据获取服务器端返回json数据

接口文档:

换头像接口 user/change_avatar发送数据HTTP Post body(一共2对KEY-VALUE):json={"uid":"1","sid":"0123456789ABCDEF0123456789ABCDEF","ver":"1","request":{}}file=图片二进制文件数据返回数据{"ret":0,"response":{    "status":1,    "url":"http://192.168.1.200:8088/thumb.php?src=http://www.mamicode.com/984340199_1667541218_1540991412.jpg&t=a&w=112&h=112"    }}

遇到的问题:
首先在封装二进制请求体参数时,传递参数不足,导致服务器端不识别POST请求。
        HttpUtils http = new HttpUtils();        RequestParams params = new RequestParams();        params.addBodyParameter("json", json);        for (int i = 0; i < files.size(); i++) {            if (files.get(i) != null) {                try {                    params.addBodyParameter("file"+i, new FileInputStream(                            files.get(i)), files.get(i).length(), files.get(i)                            .getName(), "application/octet-stream");                } catch (FileNotFoundException e) {                    e.printStackTrace();                }            }        }

  params.addBodyParameter(key, stream, length, fileName, mimeType);

然后在发送POST请求时,使用的是异步方法,导致不能返回服务器返回的值。
        String s = null;        try {            // 同步方法,获取服务器端返回的流            ResponseStream responseStream = http.sendSync(HttpMethod.POST, url,                    params);            s = responseStream.readString();        } catch (Exception e) {            e.printStackTrace();        }        return s;

  ResponseStream responseStream = http.sendSync(method, url, params);

 下面附上发送POST请求的完整代码:
    /**     * 发送POST请求,携带json和多个文件参数得到服务器返回的结果(json格式)     *      * @param url 请求地址     * @param json 请求体中封装的json字符串     * @param List<File> 上传多个文件     * @return String 服务器返回的结果     */    public static String sendPost(String url, String json, List<File> files) {        HttpUtils http = new HttpUtils();        RequestParams params = new RequestParams();        params.addBodyParameter("json", json);        if (files.size() == 1) {            try {                params.addBodyParameter("file",                        new FileInputStream(files.get(0)), files.get(0)                                .length(), files.get(0).getName(),                        "application/octet-stream");            } catch (FileNotFoundException e) {                e.printStackTrace();            }        } else {            for (int i = 0; i < files.size(); i++) {                if (files.get(i) != null) {                    try {                        params.addBodyParameter("file" + i,                                new FileInputStream(files.get(i)), files.get(i)                                        .length(), files.get(i).getName(),                                "application/octet-stream");                    } catch (FileNotFoundException e) {                        e.printStackTrace();                    }                }            }        }        String s = null;        try {            // 同步方法,获取服务器端返回的流            ResponseStream responseStream = http.sendSync(HttpMethod.POST, url,                    params);            s = responseStream.readString();        } catch (Exception e) {            e.printStackTrace();        }        return s;    }

 

使用xutils发送POST请求,携带json和图片二进制文件数据获取服务器端返回json数据