Android HttpClient post MultipartEntity
来源:互联网 发布:索尼a6300 知乎 编辑:程序博客网 时间:2024/06/10 05:04
在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包,
我这里用的是源文件,因为我需要修改些东西
三.使用
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";// 写成自己要上传的地址@Overrideprotected 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;}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);if (result.equals("success")) {}}}
四.与HttpURLConnection比较
网上好多人都用的是HttpURLConnection来上传图片,文件。由于我在解决实际问题时HttpURLConnection并不能达到预期,老是死在urlConnection.getInputStream()永远回不来。所以不得以改用的上面的库。最终感觉MultipartEntity用起来比较简单。
附:
在解决实际问题中,我也不是一帆风顺,也遇到了各种抽象的问题。推荐给大家个工具wireshark工具,用于抓取网络协议用的。很有帮助
- Android HttpClient post MultipartEntity
- Android HttpClient post MultipartEntity upload.
- Android HttpClient post MultipartEntity - Android 上传文件
- HttpClient的MultipartEntity
- android 图片上传,使用 httpclient 的MultipartEntity 上传
- HTTPCLIENT MultipartEntity 上传中文乱码
- Android HttpClient POST GET
- android httpclient get post 代码
- HttpClient-MultipartEntity上传文字和图像
- Using MultipartEntity in Android applications
- java/android httpclient post/get用法
- Android HttpClient基本使用方法!!--get和post
- android使用apache httpclient发送post请求
- httpclient将android数据post到数据库
- Android-异步HttpClient框架(get/post)
- Android HttpClient get、post 访问网络
- android:HttpClient请求(get、post)
- Android——HttpClient(get&post)
- iOS: NSDictionary的方法dictionaryWithObjects:forKeys:count:
- Animation RotateAnimation详解
- 在VC和C#中如何使用Windows Media Encoder COM组件接口编程
- sql 判断表、列、视图等是否存在
- 快速构建C++项目工具Scons,结合Editplus搭建开发环境
- Android HttpClient post MultipartEntity
- 国产电视剧中电脑高手镜头是怎么拍出来的
- 一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字。
- iOS: NSDictionary的方法dictionaryWithObjectsAndKeys:
- HDOJ 4638: Group
- 探讨ORACLE的SCN机制(2):文件检查点
- 定义区间DP(可以看看,写的非常简练)
- QT 的 connect signal slot 注意一下这个
- Eclipse 项目有红感叹号