Android上传文件到服务端可以使用HttpConnection 上传文件,也可以使用Android封装好的HttpClient类。当仅仅上传文件可以直接使用httpconnection 上传比较方便快捷。

1、使用HttpConection上传文件。将文件转换成表单数据流。主要的思路就自己构造个http协议内容,服务端解析报文获得表单数据。代码片段:

 HttpURLConnection con;try {con = (HttpURLConnection) url.openConnection();con.setConnectTimeout(C_TimeOut);/* 允许Input、Output,不使用Cache */con.setDoInput(true);con.setDoOutput(true);con.setUseCaches(false);/* 设置传送的method=POST */con.setRequestMethod("POST");/* setRequestProperty */con.setRequestProperty("Connection", "Keep-Alive");con.setRequestProperty("Charset", "UTF-8");con.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);/* 设置DataOutputStream */ DataOutputStream ds = new DataOutputStream(con.getOutputStream());     FileInputStream fStream = new FileInputStream(file);      /* 设置每次写入1024bytes */      int bufferSize = 1024;      byte[] buffer = new byte[bufferSize];      int length = -1;      /* 从文件读取数据至缓冲区 */      while((length = fStream.read(buffer)) != -1)      {        /* 将资料写入DataOutputStream中 */        ds.write(buffer, 0, length);      }       fStream.close();       ds.flush();      ds.close();          


可以参考

①《在 Android 上通过模拟 HTTP multipart/form-data 请求协议信息实现图片上传》(http://bertlee.iteye.com/blog/1134576)。

②《关于android Http访问,上传,用了三个方法

2、使用Android HttpClient类上传参数。下面我在网上搜到得代码,忘记出处了吐舌头

private static boolean sendPOSTRequestHttpClient(String path,Map<String, String> params) throws Exception {// 封装请求参数List<NameValuePair> pair = new ArrayList<NameValuePair>();if (params != null && !params.isEmpty()) {for (Map.Entry<String, String> entry : params.entrySet()) {pair.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}} // 把请求参数变成请求体部分UrlEncodedFormEntity uee = new UrlEncodedFormEntity(pair, "utf-8"); // 使用HttpPost对象设置发送的URL路径HttpPost post = new HttpPost(path); // 发送请求体post.setEntity(uee); // 创建一个浏览器对象,以把POST对象向服务器发送,并返回响应消息DefaultHttpClient dhc = new DefaultHttpClient();HttpResponse response = dhc.execute(post);if (response.getStatusLine().getStatusCode() == 200) {Log.i("http", "httpclient");return true;}return false;}}


3、使用httpClient上传文字信息和文件信息。使用httpClient上传文件非常的方便。不过需要导入apache-mime4j-0.6.jar 和httpmime-4.0.jar两个.jar包。

// 封装请求参数MultipartEntity mpEntity = new MultipartEntity();if (params != null && !params.isEmpty()) {for (Map.Entry<String, String> entry : params.entrySet()) {StringBody par = new StringBody(entry.getValue());mpEntity.addPart(entry.getKey(), par);}}// 图片if (!imagepath.equals("")) {FileBody file = new FileBody(new File(imagepath));mpEntity.addPart("photo", file);}// 使用HttpPost对象设置发送的URL路径HttpPost post = new HttpPost(path);// 发送请求体post.setEntity(mpEntity);// 创建一个浏览器对象,以把POST对象向服务器发送,并返回响应消息DefaultHttpClient dhc = new DefaultHttpClient();HttpResponse response = dhc.execute(post);

FileBody类可以把文件封装到表单中,实现附件的上传。

关于httpClient上传文件可以参考链接:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76721&page=1

需要用的的ja下载地址r:http://download.csdn.net/detail/china1988s/3791514

参考:

①《在 Android 上通过模拟 HTTP multipart/form-data 请求协议信息实现图片上传》(http://bertlee.iteye.com/blog/1134576)。

②《关于android Http访问,上传,用了三个方法

更多相关文章

  1. Android模拟 HTTP multipart/form-data 请求协议信息实现图片上
  2. Android 上传图片到后台的一直方式Base64的String形式
  3. Android -- SharedPreferences保存基本数据、序列化对象、List数
  4. Android webview与js交换JSON对象数据示例
  5. Android中Intent传递对象的两种方法(Serializable,Parcelable)
  6. Android--用Pull解析器将对象解析成xml文件及单元测试
  7. Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP

随机推荐

  1. Picasso picasso-强大的Android图片下载
  2. android百度定位
  3. 一些常用SD卡操作的方法,APk管理之类的方
  4. Android读取服务器图片
  5. Android 通知之 Notification
  6. Android Bad notification for startFore
  7. Android中执行adb命令
  8. 获取android 刚发出去的短信
  9. Android Support Multidex原理分析
  10. How to compile Android(安卓)2.3 on Ubu