关于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月前
|
Android开发 开发者
Android自定义view之利用drawArc方法实现动态效果
本文介绍了如何通过Android自定义View实现动态效果,重点使用`drawArc`方法完成圆弧动画。首先通过`onSizeChanged`进行测量,初始化画笔属性,设置圆弧相关参数。核心思路是不断改变圆弧扫过角度`sweepAngle`,并调用`invalidate()`刷新View以实现动态旋转效果。最后附上完整代码与效果图,帮助开发者快速理解并实践这一动画实现方式。
140 0
|
2月前
|
运维 网络协议 安全
为什么经过IPSec隧道后HTTPS会访问不通?一次隧道环境下的实战分析
本文介绍了一个典型的 HTTPS 无法访问问题的排查过程。问题表现为 HTTP 正常而 HTTPS 无法打开,最终发现是由于 MTU 设置不当导致报文被丢弃。HTTPS 因禁止分片,对 MTU 更敏感。解决方案包括调整 MSS 或中间设备干预。
|
3月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
179 11
|
4月前
|
安全 Linux 定位技术
Curl访问Kerberos SPNEGO保护的HTTP资源
最后,记住,虽然Kerberos的魔法强大且久经考验,但它仍需你谨慎掌握。SPNEGO的舞步看似复杂,但一旦跳起来,你会发现自己在安全和便捷的旋律中翩翩起舞。而Curl,这一灵活敏捷的小工具,它的确有能力成为你施展这些魔法的得力助手。
91 14
|
6月前
|
Linux C语言 iOS开发
C语言结合AWTK开发HTTP接口访问界面
这样,我们就实现了在C语言中使用libcurl和AWTK来访问HTTP接口并在界面上显示结果。这只是一个基础的示例,你可以根据需要添加更多的功能和优化。例如,你可以添加错误处理机制、支持更多HTTP方法(如POST、PUT等)、优化用户界面等。
345 82
|
3月前
|
数据采集 Web App开发 iOS开发
解决Python爬虫访问HTTPS资源时Cookie超时问题
解决Python爬虫访问HTTPS资源时Cookie超时问题
|
4月前
HTTP协议探究:常用方法一网打尽
总的来说,HTTP协议的命令犹如一把钥匙,解锁了互联网世界的大门。它是规则,也是工具,了解了它,就等于掌握了互联网的一把通行证。我们每天都在用,也常常无视它,但是只有深刻理解了它,才能更好地运用它。如此,我们的互联网世界旅程就会变得更加顺畅,更加有趣。
117 14
|
5月前
|
Go
在golang中发起http请求以获取访问域名的ip地址实例(使用net, httptrace库)
这只是追踪我们的行程的简单方法,不过希望你跟着探险家的脚步,即使是在互联网的隧道中,也可以找到你想去的地方。接下来就是你的探险之旅了,祝你好运!
189 26
|
7月前
|
JSON API 网络架构
HTTP常见的请求方法、响应状态码、接口规范介绍
本文详细介绍了HTTP常见的请求方法、响应状态码和接口规范。通过理解和掌握这些内容,开发者可以更好地设计和实现W
1045 83
|
6月前
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
555 5

热门文章

最新文章