Android HttpClient post MultipartEntity - Android 上传文件
转自[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包,
我这里用的是源文件,因为我需要修改些东西
三.使用
- 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 上传文件的更多相关文章
- Android应用开发中webview上传文件的几种思路
1. 常规方法,重写WebChromeClient 的 openFileChooser 方法 private class MyWebChromeClient extends WebChromeClie ...
- Android通过HTTP协议实现上传文件数据
SocketHttpRequester.java package cn.itcast.utils; import java.io.BufferedReader; import java.io.Byte ...
- HttpClient 测试web API上传文件实例
1.使用HttpClient 测试上传文件并且设置header信息: using Lemon.Common; using Newtonsoft.Json; using System; using Sy ...
- C# HttpClient Post 参数同时上传文件 上传图片 调用接口
// 调用接口上传文件 using (var client = new HttpClient()) { using (var multipartFormDataContent = new Multip ...
- httpclient请求接口,上传文件附加参数(.net core)
/// <summary> /// 上传文件 - 武汉站点 /// </summary> [HttpPost] public IActionResult UploadWH(Re ...
- (十)HttpClient以multipart/form-data上传文件
原文链接:https://blog.csdn.net/wsdtq123/article/details/78888734 POST上传文件 最早的HTTP POST是不支持文件上传的,给编程开发带来很 ...
- 转 Android HttpClient post MultipartEntity - Android 上传文件
转自 http://blog.csdn.net/hellohaifei/article/details/9707089 在Android 中使用HttpClient,MultipartEntity ...
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
简单的Demo,用于了解WebAPI如何同时接收文件及数据,同时提供HttpClient模拟如何同时上传文件和数据的Demo,下面是HttpClient上传的Demo界面 1.HttpClient部分 ...
- 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder
请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...
随机推荐
- IOS - socket 编程初体验
#import "ViewController.h" @interface ViewController () <NSStreamDelegate, UITextFieldD ...
- IPv6地址介绍
IPv6地址介绍 2008 年 04 月 10 日 1. 认识IPv6地址 IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示:而IPv6 ...
- JPush集成
JPush SDK 收到推送,通过广播的方式,转发给开发者App,这样开发者就可以灵活地进行处理. 这个动作不是必须的.用户有需要才定义 Receiver 类来处理 SDK过来的广播. 如果不做这个动 ...
- backtracking(回溯算法)
http://blog.csdn.net/zxasqwedc/article/details/42270215 permutation的程式码都会长成这样的格式: ] = { 'a', 'b', 'c ...
- hdu2108(判断凸多边形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2108 题意: 给出一个多边形的所有顶点,判断是不是凸多边形: 思路: 判断凸多边形的方法比较多,如:若 ...
- Swift - 代码创建单例
创建单例的方法 import UIKit //创建一个单例类 class SingleInstance: NSObject { //在单例类中,有一个用来共享数据的数组 var datas = [St ...
- Lattice 的 Framebuffer IP核使用调试笔记之IP核生成与参数设置
本文由远航路上ing 原创,转载请标明出处. 这节笔记记录IP核的生成以及参数设置. 先再IP库里下载安装Framebuffer 的ipcore 并安装完毕. 一.IP核的生成: 1.先点击IP核则右 ...
- js获取缓存数据
后台:request.setAttribute("type", type); 前台js获取:var type = "${type}";
- MVC - 17.OA项目
1.分层 2.项目依赖关系 MODEL IDAL -> MODEL DAL -> IDAL,MODEL,EntityFramewrok(注意和MODEL里的版本要一致),S ...
- android:id="@id/resid" , andorid:id="@+id/resid" 的区别
的区别?android:id="@id/resid" // 引用现有的资源idandorid:id="@+id/resid" // 新增一个资源id i ...