转自[http://blog.csdn.net/hellohaifei/article/details/9707089]

在Android 中使用HttpClient,MultipartEntity

为了发送图片,文件等资源,现在采用开源的org.apache.http.entity.mime.MultipartEntity

一.去官网http://hc.apache.org/downloads.cgi下载

可以只下载binary,如果可能需要修改源文件的话,可以直接下载source.

二.导入jar包

将下载下来的httpcomponents-client-4.2.5-bin.zip取其httpcomponents-client-4.2.5-bin.zip\httpcomponents-client-4.2.5\lib\httpmime-4.2.5.jar包

将httpmime-4.2.5.jar包,放到android工程的lib目录下。

三. 查看jar包,

我这里用的是源文件,因为我需要修改些东西

三.使用

[java] view plain copy
  1. classMyAsyncTaskextendsAsyncTask<String,Integer,String>{
  2. StringFORM_TABLE_NAME="ask?action=Chatbottom-toSay-";//自己需要配置的表单
  3. StringfilePath="/mnt/sdcard/picture.jpg";//测试写的文件路径,转换成自己的文件路径
  4. finalStringhostUrl="http://www.myhost.com";//写成自己要上传的地址
  5. @Override
  6. protectedStringdoInBackground(String...params){
  7. HttpClienthttpclient=null;
  8. httpclient=newDefaultHttpClient();
  9. finalHttpPosthttppost=newHttpPost(hostUrl);
  10. finalFileimageFile=newFile(filePath);
  11. finalMultipartEntitymultipartEntity=newMultipartEntity();
  12. if(false){
  13. InputStreamin=null;
  14. try{
  15. in=newFileInputStream(imageFile);
  16. }catch(FileNotFoundExceptione){
  17. e.printStackTrace();
  18. }
  19. InputStreamBodyinputStreamBody=newInputStreamBody(in,
  20. "android_inputstream.jpg");
  21. //FormBodyPartformBodyPart=newFormBodyPart(FORM_TABLE_NAME,
  22. //contentBody);
  23. multipartEntity.addPart(FORM_TABLE_NAME,inputStreamBody);
  24. }
  25. if(false){
  26. ContentBodycontentBody=newFileBody(imageFile);
  27. FormBodyPartformBodyPart=newFormBodyPart(FORM_TABLE_NAME,
  28. contentBody);
  29. multipartEntity.addPart(formBodyPart);
  30. }
  31. if(false){
  32. //FileBodyfileBody=newFileBody(imageFile,"image/jpeg",
  33. //"utf-8");
  34. FileBodyfileBody=newFileBody(imageFile);
  35. multipartEntity.addPart(FORM_TABLE_NAME,fileBody);
  36. }
  37. if(true){
  38. BitmapphotoBM=BitmapFactory.decodeFile(filePath);
  39. if(photoBM==null){
  40. returnnull;
  41. }
  42. ByteArrayOutputStreamphotoBao=newByteArrayOutputStream();
  43. booleansuccessCompress=photoBM.compress(CompressFormat.JPEG,
  44. 80,photoBao);
  45. if(!successCompress){
  46. returnnull;
  47. }
  48. ByteArrayBodybyteArrayBody=newByteArrayBody(
  49. photoBao.toByteArray(),"android.jpg");
  50. photoBM.recycle();
  51. //InputStreamBodyinbody=newInputStreamBody(newInputStream,
  52. //filename);
  53. multipartEntity.addPart(FORM_TABLE_NAME,byteArrayBody);
  54. }
  55. httppost.setEntity(multipartEntity);
  56. HttpResponsehttpResponse;
  57. try{
  58. httpResponse=httpclient.execute(httppost);
  59. finalintstatusCode=httpResponse.getStatusLine()
  60. .getStatusCode();
  61. Stringresponse=EntityUtils.toString(
  62. httpResponse.getEntity(),HTTP.UTF_8);
  63. IWLog.d("gotresponse:\n"+response);
  64. if(statusCode==HttpStatus.SC_OK){
  65. return"success";
  66. }
  67. }catch(ClientProtocolExceptione){
  68. e.printStackTrace();
  69. }catch(IOExceptione){
  70. e.printStackTrace();
  71. }finally{
  72. if(httpclient!=null){
  73. httpclient.getConnectionManager().shutdown();
  74. httpclient=null;
  75. }
  76. }
  77. returnnull;
  78. }
  79. @Override
  80. protectedvoidonPostExecute(Stringresult){
  81. super.onPostExecute(result);
  82. if(result.equals("success")){
  83. }
  84. }
  85. }

四.与HttpURLConnection比较

网上好多人都用的是HttpURLConnection来上传图片,文件。由于我在解决实际问题时HttpURLConnection并不能达到预期,老是死在urlConnection.getInputStream()永远回不来。所以不得以改用的上面的库。最终感觉MultipartEntity用起来比较简单。

附:

在解决实际问题中,我也不是一帆风顺,也遇到了各种抽象的问题。推荐给大家个工具wireshark工具,用于抓取网络协议用的。很有帮助

更多0

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android4.2.2自增物理按键(frameworks)
  4. 编译 Android版本的Openal方式
  5. Android介绍
  6. 修改Android开机画面
  7. Android下载网络图片到本地
  8. android中将txt文件保存到SD卡中
  9. Android(安卓)SDK下载和更新失败的解决方法

随机推荐

  1. how to use data extraction API for jav
  2. Android取消关闭系统自动更新
  3. Windows下批量下载Android源码
  4. Android(安卓)UI源码解析
  5. Android(安卓): gen already exists but
  6. Android相关知识集合
  7. Android(安卓)FlexboxLayout的简单了解以
  8. Android提高之多方向抽屉实现方法
  9. Android(安卓)10.0夜间模式和换肤(备份)
  10. Android(安卓)4.4以上 根据uri获取路径的