Android|在android中使用HTTPClient以post方法发送二进制文件


首先,在propotities-> Java build path -> Libraries中add external jars中引入httpclient-4.2.5.jar和httpmime-4.2.5.jar
然后再将这两个包拷贝到项目工程下的libs目录下;


import java.io.ByteArrayOutputStream;

import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.params.HttpClientParams; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.ByteArrayBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Log; /** * HTTP请求辅助类,用于人脸识别过程中向face++发送请求 * @author witness * */public class HTTPUtils { private static HttpParams httpParams = new BasicHttpParams(); private static HttpClient httpClient = getHttpClient(); public static String doGet(String url, Map params){ String paramStr = ""; Iterator iter = params.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object val = entry.getValue(); paramStr += paramStr = "&" + key + "=" + val; } //if (!paramStr.equals("")) { //paramStr = paramStr.replaceFirst("&", "?"); //url += paramStr; //} HttpGet httpRequest = new HttpGet(url); String strResult = "doGetError"; try { /* 发送请求并等待响应 */ HttpResponse httpResponse = httpClient.execute(httpRequest); /* 若状态码为200 ok */ if (httpResponse.getStatusLine().getStatusCode() == 200) { /* 读返回数据 */ strResult = EntityUtils.toString(httpResponse.getEntity()); } else { strResult = "Error Response: " + httpResponse.getStatusLine().toString(); } } catch (ClientProtocolException e) { strResult = e.getMessage().toString(); e.printStackTrace(); } catch (IOException e) { strResult = e.getMessage().toString(); e.printStackTrace(); } catch (Exception e) { strResult = e.getMessage().toString(); e.printStackTrace(); } Log.v("strResult", strResult); return strResult; } @SuppressWarnings("deprecation") public static String doPost(String url, byte[] imgData) { /* 建立HTTPPost对象 */ HttpPost httpRequest = new HttpPost(url); String strResult = "doPostError"; try { MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); /* 添加请求参数到请求对象 */ ByteArrayBody img = new ByteArrayBody(imgData, "img"); StringBody key = new StringBody(Constants.API_KEY); StringBody secret = new StringBody(Constants.API_SECRET); entity.addPart("img", img); entity.addPart("api_key", key); entity.addPart("api_secret", secret); httpRequest.setEntity(entity); /* 发送请求并等待响应 */ HttpResponse httpResponse = httpClient.execute(httpRequest); /* 若状态码为200 ok */ if (httpResponse.getStatusLine().getStatusCode() == 200) { /* 读返回数据 */ strResult = EntityUtils.toString(httpResponse.getEntity()); } else { strResult = "Error Response: " + httpResponse.getStatusLine().toString(); } } catch (ClientProtocolException e) { strResult = e.getMessage().toString(); e.printStackTrace(); } catch (IOException e) { strResult = e.getMessage().toString(); e.printStackTrace(); } catch (Exception e) { strResult = e.getMessage().toString(); e.printStackTrace(); } Log.v("strResult", strResult); return strResult; } private static HttpClient getHttpClient() { // 设置连接超时和 Socket 超时,以及 Socket 缓存大小 HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000); HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000); HttpConnectionParams.setSocketBufferSize(httpParams, 8192); // 设置重定向,缺省为 true HttpClientParams.setRedirecting(httpParams, true); // 设置 user agent String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2) Gecko/20100115 Firefox/3.6"; HttpProtocolParams.setUserAgent(httpParams, userAgent); // 创建一个 HttpClient 实例 // 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient // 中的用法,在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient httpClient = new DefaultHttpClient(httpParams); return httpClient; } public static byte[] getBitmapByte(Bitmap bitmap){ ByteArrayOutputStream out = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); try { out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } return out.toByteArray(); } public static Bitmap getBitmapFromByte(byte[] temp){ if(temp != null){ Bitmap bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length); return bitmap; }else{ return null; } } }



【Android|在android中使用HTTPClient以post方法发送二进制文件】

    推荐阅读