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

来源:互联网 发布:java线程锁 编辑:程序博客网 时间:2024/05/16 06:52

<span style="font-family: Arial, Helvetica, sans-serif;"></span><p>首先,在propotities-> Java build path -> Libraries中add external jars中引入httpclient-4.2.5.jar和httpmime-4.2.5.jar </p><p>然后再将这两个包拷贝到项目工程下的libs目录下;</p>
<span style="font-family: Arial, Helvetica, sans-serif;">import java.io.ByteArrayOutputStream;</span>
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;      }  }  }



0 0
原创粉丝点击