转 Android HttpClient post MultipartEntity - Android 上传文件

时间:2022-09-12 18:13:49

转自  //bbsmax.ikafan.com/static/L3Byb3h5L2h0dHAvYmxvZy5jc2RuLm5ldC9oZWxsb2hhaWZlaS9hcnRpY2xlL2RldGFpbHMvOTcwNzA4OQ==.jpg

在Android 中使用HttpClient,MultipartEntity

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

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

转 Android HttpClient post MultipartEntity - Android 上传文件

可以只下载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包,

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

转 Android HttpClient post MultipartEntity - Android 上传文件

三.使用

  1. class MyAsyncTask extends AsyncTask<String, Integer, String> {
  2. String FORM_TABLE_NAME = "ask?action=Chatbottom-toSay-";// 自己需要配置的表单
  3. String filePath = "/mnt/sdcard/picture.jpg";// 测试写的文件路径,转换成自己的文件路径
  4. final String hostUrl = "http://www.myhost.com";// 写成自己要上传的地址
  5. @Override
  6. protected String doInBackground(String... params) {
  7. HttpClient httpclient = null;
  8. httpclient = new DefaultHttpClient();
  9. final HttpPost httppost = new HttpPost(hostUrl);
  10. final File imageFile = new File(filePath);
  11. final MultipartEntity multipartEntity = new MultipartEntity();
  12. if (false) {
  13. InputStream in = null;
  14. try {
  15. in = new FileInputStream(imageFile);
  16. } catch (FileNotFoundException e) {
  17. e.printStackTrace();
  18. }
  19. InputStreamBody inputStreamBody = new InputStreamBody(in,
  20. "android_inputstream.jpg");
  21. // FormBodyPart formBodyPart = new FormBodyPart(FORM_TABLE_NAME,
  22. // contentBody);
  23. multipartEntity.addPart(FORM_TABLE_NAME, inputStreamBody);
  24. }
  25. if (false) {
  26. ContentBody contentBody = new FileBody(imageFile);
  27. FormBodyPart formBodyPart = new FormBodyPart(FORM_TABLE_NAME,
  28. contentBody);
  29. multipartEntity.addPart(formBodyPart);
  30. }
  31. if (false) {
  32. // FileBody fileBody = new FileBody(imageFile, "image/jpeg",
  33. // "utf-8");
  34. FileBody fileBody = new FileBody(imageFile);
  35. multipartEntity.addPart(FORM_TABLE_NAME, fileBody);
  36. }
  37. if (true) {
  38. Bitmap photoBM = BitmapFactory.decodeFile(filePath);
  39. if (photoBM == null) {
  40. return null;
  41. }
  42. ByteArrayOutputStream photoBao = new ByteArrayOutputStream();
  43. boolean successCompress = photoBM.compress(CompressFormat.JPEG,
  44. 80, photoBao);
  45. if (!successCompress) {
  46. return null;
  47. }
  48. ByteArrayBody byteArrayBody = new ByteArrayBody(
  49. photoBao.toByteArray(), "android.jpg");
  50. photoBM.recycle();
  51. // InputStreamBody inbody = new InputStreamBody(new InputStream,
  52. // filename);
  53. multipartEntity.addPart(FORM_TABLE_NAME, byteArrayBody);
  54. }
  55. httppost.setEntity(multipartEntity);
  56. HttpResponse httpResponse;
  57. try {
  58. httpResponse = httpclient.execute(httppost);
  59. final int statusCode = httpResponse.getStatusLine()
  60. .getStatusCode();
  61. String response = EntityUtils.toString(
  62. httpResponse.getEntity(), HTTP.UTF_8);
  63. IWLog.d("got response:\n" + response);
  64. if (statusCode == HttpStatus.SC_OK) {
  65. return "success";
  66. }
  67. } catch (ClientProtocolException e) {
  68. e.printStackTrace();
  69. } catch (IOException e) {
  70. e.printStackTrace();
  71. } finally {
  72. if (httpclient != null) {
  73. httpclient.getConnectionManager().shutdown();
  74. httpclient = null;
  75. }
  76. }
  77. return null;
  78. }
  79. @Override
  80. protected void onPostExecute(String result) {
  81. super.onPostExecute(result);
  82. if (result.equals("success")) {
  83. }
  84. }
  85. }

四.与HttpURLConnection比较

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

附:

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

转 Android HttpClient post MultipartEntity - Android 上传文件的更多相关文章

  1. Android应用开发中webview上传文件的几种思路

    1. 常规方法,重写WebChromeClient 的 openFileChooser 方法 private class MyWebChromeClient extends WebChromeClie ...

  2. Android通过HTTP协议实现上传文件数据

    SocketHttpRequester.java package cn.itcast.utils; import java.io.BufferedReader; import java.io.Byte ...

  3. HttpClient 测试web API上传文件实例

    1.使用HttpClient 测试上传文件并且设置header信息: using Lemon.Common; using Newtonsoft.Json; using System; using Sy ...

  4. C&num; HttpClient Post 参数同时上传文件 上传图片 调用接口

    // 调用接口上传文件 using (var client = new HttpClient()) { using (var multipartFormDataContent = new Multip ...

  5. httpclient请求接口,上传文件附加参数(&period;net core)

    /// <summary> /// 上传文件 - 武汉站点 /// </summary> [HttpPost] public IActionResult UploadWH(Re ...

  6. (十)HttpClient以multipart&sol;form-data上传文件

    原文链接:https://blog.csdn.net/wsdtq123/article/details/78888734 POST上传文件 最早的HTTP POST是不支持文件上传的,给编程开发带来很 ...

  7. Android HttpClient post MultipartEntity - Android 上传文件

    转自[http://blog.csdn.net/hellohaifei/article/details/9707089] 在Android 中使用HttpClient,MultipartEntity ...

  8. WebAPI通过multipart&sol;form-data方式同时上传文件以及数据(含HttpClient上传Demo)

    简单的Demo,用于了解WebAPI如何同时接收文件及数据,同时提供HttpClient模拟如何同时上传文件和数据的Demo,下面是HttpClient上传的Demo界面 1.HttpClient部分 ...

  9. 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder

    请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...

随机推荐

  1. Android入门笔记(重制版)

    Android项目的目录结构(Eclipse版) src:项目源代码文件夹 R.java:存放项目中所有资源文件的资源id,永远不要修改 Android.jar:Android的jar包,导入此包方可 ...

  2. ZooKeeper在centos6&period;4的集群搭建

    首先给一个小tips,在搭建zookeeper之前,需要配置好java环境,请参看我的另一篇文章<Jdk1.8在CentOS7中的安装与配置>,还需要免密码登录,请参看我的另一篇文章&lt ...

  3. C&num; RGB与16进制颜色转换方法

    http://www.cnblogs.com/goldarch/archive/2010/08/16/1801053.html #region [颜色:16进制转成RGB]        /// &l ...

  4. Java-IO之FileReader和FileWriter

    FileReader是用于读取字符流的类,它继承于InputStreamReader,要读取原始字节流,考虑使用FileInputStream:FileWriter是用于写入字符流的类,继承于Outp ...

  5. 【数学建模】MATLAB语法

    一.向量.矩阵的表示和使用 format long  %小数很多format short %默认4位小数format rat %显示最近的分数format short e %指数格式的数 尾数多少 e ...

  6. oracle 查询所有约束

    主键约束SELECT  USER_CONS_COLUMNS.CONSTRAINT_NAME AS 约束名,  USER_CONS_COLUMNS.TABLE_NAME AS 表名,  USER_CON ...

  7. 浅析USB之设备枚举

    当一个USB设备插入主机后,会有以下活动: 配上状态图

  8. 加密算法(扩展知识:Base64编码)

    在某些考虑数据安全的场景下,我们常常会用到加密解密.编码解码知识.比如把用户密码保存到数据库上,常用的方式是通过MD5或SHA1不可逆算法进行加密后密文保存. 这里主要介绍三种常用的加密算法: (1) ...

  9. how to insert js to iframe page in order to disabled open new page&sol;window

    how to insert js to iframe page in order to disabled open new page/window js 禁用 iframe 中的页面打开新页面 htt ...

  10. redis源码解析之事件驱动

    Redis 内部有个小型的事件驱动,它主要处理两项任务: 文件事件:使用I/O多路复用技术处理多个客户端请求,并返回执行结果. 时间事件:维护服务器的资源管理,状态检查. 主要的数据结构包括文件事件结 ...