如何将图像与其他数据一起上传到Android的JSON Web Service

时间:2014-04-20 18:07:30

标签: android json image web-services image-uploading

我需要将Android中的图像与其他数据一起上传到JSON Web服务。问题是我无法立刻找到办法。 这是我用来发出请求的代码:

public JSONObject makeHttpRequest(String url, String method, 
        List<NameValuePair> params) throws JSONException {
    try {
        if (method == "POST") {     
            HttpPost httpPost = new HttpPost(url);

            httpPost.setEntity(new UrlEncodedFormEntity(params));

            HttpResponse httpResponse = httpClient.execute(httpPost);

            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        } else if (method == "GET") {
            //...
        }

    } catch (Exception e) {
        //...
    }
    //...
    // Parse response and return json object
    return null;
}

以下是我用来填充params参数的代码:

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("first_name", "John"));
params.add(new BasicNameValuePair("last_name", "Doe"));
params.add(new BasicNameValuePair("image", ??));

我尝试过使用SDCard中的图像路径没有结果,图像也是一个字符串,下面的代码没有结果。

Bitmap bitmap = BitmapFactory.decodeFile(group.getImgPath());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String strBitMap = Base64.encodeToString(b, Base64.DEFAULT); 
params.add(new BasicNameValuePair("image", strBitMap));

当我使用mutlipart实体时,我不知道如何设置params对象,只设置图像。问题是我需要立即上传包括图像在内的所有数据。

任何解决方案? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

尝试创建一个多部分实体,并将它们添加为键值对,如下所示:

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

//for strings
entity.addPart("first_name", new StringBody(nameValuePairs.get(0).getValue()));
entity.addPart("last_name", new StringBody(nameValuePairs.get(1).getValue()));

//for image
entity.addPart("image", new FileBody(new File (nameValuePairs.get(2).getValue())));

然后做

httpPost.setEntity(entity);

执行前。