我是靠谱客的博主 糊涂小海豚,这篇文章主要介绍Android HttpClient post MultipartEntity,现在分享给大家,希望可以做个参考。

在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.ziphttpcomponents-client-4.2.5libhttpmime-4.2.5.jar包

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

三. 查看jar包,

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


三.使用

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

四.与HttpURLConnection比较

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

附:

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

最后

以上就是糊涂小海豚最近收集整理的关于Android HttpClient post MultipartEntity的全部内容,更多相关Android内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部