Android HttpClient上传文件与Httpconnection知识小结

         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访问,上传,用了三个方法

 

 

 

 

 

你可能感兴趣的:(android,exception,String,File,buffer,Path)