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

简介:

刚开始学习android的时候,想上传图片或者文件到服务器都折腾了很久,不过在后来的开发中把它写成了一个公共类,每次用的时候只传相关参数即可,非常方便,今天写下来也方便自己以后使用。


package com.bingo.net;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.TimeUnit;

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;

import com.bingo.BingoApp;
public class Communication {
	
	
	/**
	 * @param 只发送普通数据,调用此方法
	 * @param urlString 对应的Php 页面
	 * @param params 需要发送的相关数据 包括调用的方法
	 * @return
	 */
	public String communication(String urlString,Map<String, String> params){
		
		HttpClient client = new DefaultHttpClient();
		
		
		
		client.getConnectionManager().closeIdleConnections(20, TimeUnit.SECONDS);//20秒
		
		String result="";
		
		String uploadUrl=new BingoApp().URLIN+"/";//new BingoApp().URLIN 是我定义的上传URL
		//http://192.168.10.9/bingo/Server/code
		String MULTIPART_FORM_DATA = "multipart/form-data"; 
		String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线
		
		if (!urlString.equals("")) {
			uploadUrl = uploadUrl+urlString;
		
		
		try {
			URL url = new URL(uploadUrl);  
	        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
	        conn.setDoInput(true);//允许输入  
	        conn.setDoOutput(true);//允许输出  
	        conn.setUseCaches(false);//不使用Cache  
	        conn.setConnectTimeout(6000);// 6秒钟连接超时
	        conn.setReadTimeout(25000);// 25秒钟读数据超时
	        conn.setRequestMethod("POST");            
	        conn.setRequestProperty("Connection", "Keep-Alive");  
	        conn.setRequestProperty("Charset", "UTF-8");  
	        conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + "; boundary=" + BOUNDARY);
	        
	      
	        StringBuilder sb = new StringBuilder();  
	          
	        //上传的表单参数部分,格式请参考文章  
	        for (Map.Entry<String, String> entry : params.entrySet()) {//构建表单字段内容  
	            sb.append("--");  
	            sb.append(BOUNDARY);  
	            sb.append("\r\n");  
	            sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");  
	            sb.append(entry.getValue());  
	            sb.append("\r\n");  
	        }  

	        
	        DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
	        dos.write(sb.toString().getBytes());
	        dos.writeBytes("--" + BOUNDARY + "--\r\n");
		      dos.flush();

		      InputStream is = conn.getInputStream();
		      InputStreamReader isr = new InputStreamReader(is, "utf-8");
		      BufferedReader br = new BufferedReader(isr);
		      result = br.readLine();
	       
		      
		}catch (Exception e) {
			result = "{\"ret\":\"898\"}";
		}
	}
		return result;
		
	}
	
	/**
	 * @param 只发送普通数据,调用此方法
	 * @param urlString 对应的Php 页面 
	 * @param params 需要发送的相关数据 包括调用的方法
	 * @paramimage 图片字节数组或者文件字节数组
	 * @paramimg 图片名称
	 * @return  Json 
	 */
	public String communication01(String urlString,Map<String, Object> params,byte[] image ,String img){
		String result="";
		
		String end = "\r\n";		
		String uploadUrl=new BingoApp().URLIN+"/";//new BingoApp().URLIN 是我定义的上传URL
		String MULTIPART_FORM_DATA = "multipart/form-data"; 
		String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线
		String imguri ="";
		Random random = new Random();
		int temp = random.nextInt();
		imguri = temp+ "sdfse"+".jpg";
		if (!urlString.equals("")) {
			uploadUrl = uploadUrl+urlString;
		
		try {
			URL url = new URL(uploadUrl);  
	        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
	        conn.setDoInput(true);//允许输入  
	        conn.setDoOutput(true);//允许输出  
	        conn.setUseCaches(false);//不使用Cache  
	        conn.setConnectTimeout(6000);// 6秒钟连接超时
	        conn.setReadTimeout(6000);// 6秒钟读数据超时
	        conn.setRequestMethod("POST");            
	        conn.setRequestProperty("Connection", "Keep-Alive");  
	        conn.setRequestProperty("Charset", "UTF-8");  
	        conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + "; boundary=" + BOUNDARY);
	        
	        StringBuilder sb = new StringBuilder();  
	          
	        //上传的表单参数部分,格式请参考文章  
	        for (Map.Entry<String, Object> entry : params.entrySet()) {//构建表单字段内容  
	            sb.append("--");  
	            sb.append(BOUNDARY);  
	            sb.append("\r\n");  
	            sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");  
	            sb.append(entry.getValue());  
	            sb.append("\r\n");  
	        }  

            sb.append("--");  
            sb.append(BOUNDARY);  
            sb.append("\r\n");  

	        DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
	        dos.write(sb.toString().getBytes());
	        
	        if (!imguri.equals("")&&!imguri.equals(null)) {
	        	 dos.writeBytes("Content-Disposition: form-data; name=\""+img+"\"; filename=\"" + imguri + "\"" + "\r\n"+"Content-Type: image/jpeg\r\n\r\n");
				 
			     dos.write(image,0,image.length);
			    
			      dos.writeBytes(end);
			     
			
	        	dos.writeBytes("--" + BOUNDARY + "--\r\n");
		      dos.flush();

		      InputStream is = conn.getInputStream();
		      InputStreamReader isr = new InputStreamReader(is, "utf-8");
		      BufferedReader br = new BufferedReader(isr);
		      result = br.readLine();
	       } 
		}catch (Exception e) {
			result = "{\"ret\":\"898\"}";
		}
	}
		return result;
		
	}
	
	
	/**
	 * @param 只发送普通数据,调用此方法
	 * @param urlString 对应的Php 页面
	 * @param params 需要发送的相关数据 包括调用的方法
	 * @param imageuri 图片或文件手机上的地址 如:sdcard/photo/123.jpg
	 * @param img 图片名称
	 * @return Json
	 */
	public String communication02(String urlString,Map<String, Object> params,String  imageuri ,String img){
		String result="";
		
		String end = "\r\n";		
		String uploadUrl=new BingoApp().URLIN+"/";//new BingoApp().URLIN 是我定义的上传URL
		String MULTIPART_FORM_DATA = "multipart/form-data"; 
		String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线
		String imguri ="";
		if (!imageuri.equals("")) {
			imguri = imageuri.substring(imageuri.lastIndexOf("/") + 1);//获得图片或文件名称
		}
		
		
		
		
		if (!urlString.equals("")) {
			uploadUrl = uploadUrl+urlString;
		
		
		try {
			URL url = new URL(uploadUrl);  
	        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
	        conn.setDoInput(true);//允许输入  
	        conn.setDoOutput(true);//允许输出  
	        conn.setUseCaches(false);//不使用Cache  
	        conn.setConnectTimeout(6000);// 6秒钟连接超时
	        conn.setReadTimeout(6000);// 6秒钟读数据超时
	        conn.setRequestMethod("POST");            
	        conn.setRequestProperty("Connection", "Keep-Alive");  
	        conn.setRequestProperty("Charset", "UTF-8");  
	        conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + "; boundary=" + BOUNDARY);
	        
	        StringBuilder sb = new StringBuilder();  
	          
	        //上传的表单参数部分,格式请参考文章  
	        for (Map.Entry<String, Object> entry : params.entrySet()) {//构建表单字段内容  
	            sb.append("--");  
	            sb.append(BOUNDARY);  
	            sb.append("\r\n");  
	            sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");  
	            sb.append(entry.getValue());  
	            sb.append("\r\n");  
	        }  

            sb.append("--");  
            sb.append(BOUNDARY);  
            sb.append("\r\n");  

	        DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
	        dos.write(sb.toString().getBytes());
	        
	        if (!imageuri.equals("")&&!imageuri.equals(null)) {
	        	 dos.writeBytes("Content-Disposition: form-data; name=\""+img+"\"; filename=\"" + imguri + "\"" + "\r\n"+"Content-Type: image/jpeg\r\n\r\n");
				  FileInputStream fis = new FileInputStream(imageuri);
			      byte[] buffer = new byte[1024]; // 8k
			      int count = 0;
			      while ((count = fis.read(buffer)) != -1)
			      {
			        dos.write(buffer, 0, count);
			      }
			      dos.writeBytes(end);
			      fis.close();
			}
	        	dos.writeBytes("--" + BOUNDARY + "--\r\n");
		      dos.flush();

		      InputStream is = conn.getInputStream();
		      InputStreamReader isr = new InputStreamReader(is, "utf-8");
		      BufferedReader br = new BufferedReader(isr);
		      result = br.readLine();
	        
		}catch (Exception e) {
			result = "{\"ret\":\"898\"}";
		}
	}
		return result;
		
	}
	
	
}


相关文章
|
5天前
|
PHP Android开发
android通过http上传文件,服务器端用php写(原创)
android通过http上传文件,服务器端用php写(原创)
15 4
|
4天前
|
Android开发
Android网络访问超时
Android网络访问超时
10 2
|
7天前
|
机器学习/深度学习 Java Shell
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
33 0
|
5天前
|
API Apache Android开发
对于Android的http请求的容错管理
对于Android的http请求的容错管理
|
5天前
|
网络协议 算法 Java
Java中如何通过代理实现对HTTP2网站的访问?
Java中如何通过代理实现对HTTP2网站的访问?
|
7天前
|
程序员 Android开发
Android亮度调节的几种实现方法
Android亮度调节的几种实现方法
9 0
|
7天前
|
Shell Android开发
Android Activity重写dump方法实现通过adb调试代码
Android Activity重写dump方法实现通过adb调试代码
13 0
|
7天前
|
Android开发
Android APP 隐藏系统软键盘的方法
Android APP 隐藏系统软键盘的方法
13 0
|
7天前
|
XML Android开发 数据安全/隐私保护
android 11后文件读写访问权限申请
android 11后文件读写访问权限申请
13 0
|
7天前
|
Android开发
Android中去掉ActionBar的几种方法
Android中去掉ActionBar的几种方法
11 0