当前位置: 代码迷 >> Android >> 关于android Http访问,上传,用了三个步骤
  详细解决方案

关于android Http访问,上传,用了三个步骤

热度:359   发布时间:2016-05-01 19:33:54.0
关于android Http访问,上传,用了三个方法
import java.io.BufferedReader;  04.import java.io.DataOutputStream;  05.import java.io.File;  06.import java.io.FileInputStream;  07.import java.io.InputStream;  08.import java.io.InputStreamReader;  09.import java.net.HttpURLConnection;  10.import java.net.URL;  11.import java.util.Map;  12.import java.util.Random;  13.import java.util.concurrent.TimeUnit;  14.  15.import org.apache.http.client.HttpClient;  16.import org.apache.http.impl.client.DefaultHttpClient;  17.  18.import com.bingo.BingoApp;  19.public class Communication {  20.      21.      22.    /** 23.     * @param 只发送普通数据,调用此方法 24.     * @param urlString 对应的Php 页面 25.     * @param params 需要发送的相关数据 包括调用的方法 26.     * @return 27.     */  28.    public String communication(String urlString,Map<String, String> params){  29.          30.        HttpClient client = new DefaultHttpClient();  31.          32.          33.          34.        client.getConnectionManager().closeIdleConnections(20, TimeUnit.SECONDS);//20秒   35.          36.        String result="";  37.          38.        String uploadUrl=new BingoApp().URLIN+"/";//new BingoApp().URLIN 是我定义的上传URL   39.        //http://192.168.10.9/bingo/Server/code   40.        String MULTIPART_FORM_DATA = "multipart/form-data";   41.        String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线   42.          43.        if (!urlString.equals("")) {  44.            uploadUrl = uploadUrl+urlString;  45.          46.          47.        try {  48.            URL url = new URL(uploadUrl);    49.            HttpURLConnection conn = (HttpURLConnection) url.openConnection();    50.            conn.setDoInput(true);//允许输入     51.            conn.setDoOutput(true);//允许输出     52.            conn.setUseCaches(false);//不使用Cache     53.            conn.setConnectTimeout(6000);// 6秒钟连接超时   54.            conn.setReadTimeout(25000);// 25秒钟读数据超时   55.            conn.setRequestMethod("POST");              56.            conn.setRequestProperty("Connection", "Keep-Alive");    57.            conn.setRequestProperty("Charset", "UTF-8");    58.            conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + "; boundary=" + BOUNDARY);  59.              60.            61.            StringBuilder sb = new StringBuilder();    62.                63.            //上传的表单参数部分,格式请参考文章     64.            for (Map.Entry<String, String> entry : params.entrySet()) {//构建表单字段内容     65.                sb.append("--");    66.                sb.append(BOUNDARY);    67.                sb.append("\r\n");    68.                sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");    69.                sb.append(entry.getValue());    70.                sb.append("\r\n");    71.            }    72.  73.              74.            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());  75.            dos.write(sb.toString().getBytes());  76.            dos.writeBytes("--" + BOUNDARY + "--\r\n");  77.              dos.flush();  78.  79.              InputStream is = conn.getInputStream();  80.              InputStreamReader isr = new InputStreamReader(is, "utf-8");  81.              BufferedReader br = new BufferedReader(isr);  82.              result = br.readLine();  83.             84.                85.        }catch (Exception e) {  86.            result = "{\"ret\":\"898\"}";  87.        }  88.    }  89.        return result;  90.          91.    }  92.      93.    /** 94.     * @param 只发送普通数据,调用此方法 95.     * @param urlString 对应的Php 页面  96.     * @param params 需要发送的相关数据 包括调用的方法 97.     * @paramimage 图片字节数组或者文件字节数组 98.     * @paramimg 图片名称 99.     * @return  Json  100.     */  101.    public String communication01(String urlString,Map<String, Object> params,byte[] image ,String img){  102.        String result="";  103.          104.        String end = "\r\n";          105.        String uploadUrl=new BingoApp().URLIN+"/";//new BingoApp().URLIN 是我定义的上传URL   106.        String MULTIPART_FORM_DATA = "multipart/form-data";   107.        String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线   108.        String imguri ="";  109.        Random random = new Random();  110.        int temp = random.nextInt();  111.        imguri = temp+ "sdfse"+".jpg";  112.        if (!urlString.equals("")) {  113.            uploadUrl = uploadUrl+urlString;  114.          115.        try {  116.            URL url = new URL(uploadUrl);    117.            HttpURLConnection conn = (HttpURLConnection) url.openConnection();    118.            conn.setDoInput(true);//允许输入     119.            conn.setDoOutput(true);//允许输出     120.            conn.setUseCaches(false);//不使用Cache     121.            conn.setConnectTimeout(6000);// 6秒钟连接超时   122.            conn.setReadTimeout(6000);// 6秒钟读数据超时   123.            conn.setRequestMethod("POST");              124.            conn.setRequestProperty("Connection", "Keep-Alive");    125.            conn.setRequestProperty("Charset", "UTF-8");    126.            conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + "; boundary=" + BOUNDARY);  127.              128.            StringBuilder sb = new StringBuilder();    129.                130.            //上传的表单参数部分,格式请参考文章     131.            for (Map.Entry<String, Object> entry : params.entrySet()) {//构建表单字段内容     132.                sb.append("--");    133.                sb.append(BOUNDARY);    134.                sb.append("\r\n");    135.                sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");    136.                sb.append(entry.getValue());    137.                sb.append("\r\n");    138.            }    139.  140.            sb.append("--");    141.            sb.append(BOUNDARY);    142.            sb.append("\r\n");    143.  144.            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());  145.            dos.write(sb.toString().getBytes());  146.              147.            if (!imguri.equals("")&&!imguri.equals(null)) {  148.                 dos.writeBytes("Content-Disposition: form-data; name=\""+img+"\"; filename=\"" + imguri + "\"" + "\r\n"+"Content-Type: image/jpeg\r\n\r\n");  149.                   150.                 dos.write(image,0,image.length);  151.                  152.                  dos.writeBytes(end);  153.                   154.              155.                dos.writeBytes("--" + BOUNDARY + "--\r\n");  156.              dos.flush();  157.  158.              InputStream is = conn.getInputStream();  159.              InputStreamReader isr = new InputStreamReader(is, "utf-8");  160.              BufferedReader br = new BufferedReader(isr);  161.              result = br.readLine();  162.           }   163.        }catch (Exception e) {  164.            result = "{\"ret\":\"898\"}";  165.        }  166.    }  167.        return result;  168.          169.    }  170.      171.      172.    /** 173.     * @param 只发送普通数据,调用此方法 174.     * @param urlString 对应的Php 页面 175.     * @param params 需要发送的相关数据 包括调用的方法 176.     * @param imageuri 图片或文件手机上的地址 如:sdcard/photo/123.jpg 177.     * @param img 图片名称 178.     * @return Json 179.     */  180.    public String communication02(String urlString,Map<String, Object> params,String  imageuri ,String img){  181.        String result="";  182.          183.        String end = "\r\n";          184.        String uploadUrl=new BingoApp().URLIN+"/";//new BingoApp().URLIN 是我定义的上传URL   185.        String MULTIPART_FORM_DATA = "multipart/form-data";   186.        String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线   187.        String imguri ="";  188.        if (!imageuri.equals("")) {  189.            imguri = imageuri.substring(imageuri.lastIndexOf("/") + 1);//获得图片或文件名称   190.        }  191.          192.          193.          194.          195.        if (!urlString.equals("")) {  196.            uploadUrl = uploadUrl+urlString;  197.          198.          199.        try {  200.            URL url = new URL(uploadUrl);    201.            HttpURLConnection conn = (HttpURLConnection) url.openConnection();    202.            conn.setDoInput(true);//允许输入     203.            conn.setDoOutput(true);//允许输出     204.            conn.setUseCaches(false);//不使用Cache     205.            conn.setConnectTimeout(6000);// 6秒钟连接超时   206.            conn.setReadTimeout(6000);// 6秒钟读数据超时   207.            conn.setRequestMethod("POST");              208.            conn.setRequestProperty("Connection", "Keep-Alive");    209.            conn.setRequestProperty("Charset", "UTF-8");    210.            conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + "; boundary=" + BOUNDARY);  211.              212.            StringBuilder sb = new StringBuilder();    213.                214.            //上传的表单参数部分,格式请参考文章     215.            for (Map.Entry<String, Object> entry : params.entrySet()) {//构建表单字段内容     216.                sb.append("--");    217.                sb.append(BOUNDARY);    218.                sb.append("\r\n");    219.                sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");    220.                sb.append(entry.getValue());    221.                sb.append("\r\n");    222.            }    223.  224.            sb.append("--");    225.            sb.append(BOUNDARY);    226.            sb.append("\r\n");    227.  228.            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());  229.            dos.write(sb.toString().getBytes());  230.              231.            if (!imageuri.equals("")&&!imageuri.equals(null)) {  232.                 dos.writeBytes("Content-Disposition: form-data; name=\""+img+"\"; filename=\"" + imguri + "\"" + "\r\n"+"Content-Type: image/jpeg\r\n\r\n");  233.                  FileInputStream fis = new FileInputStream(imageuri);  234.                  byte[] buffer = new byte[1024]; // 8k   235.                  int count = 0;  236.                  while ((count = fis.read(buffer)) != -1)  237.                  {  238.                    dos.write(buffer, 0, count);  239.                  }  240.                  dos.writeBytes(end);  241.                  fis.close();  242.            }  243.                dos.writeBytes("--" + BOUNDARY + "--\r\n");  244.              dos.flush();  245.  246.              InputStream is = conn.getInputStream();  247.              InputStreamReader isr = new InputStreamReader(is, "utf-8");  248.              BufferedReader br = new BufferedReader(isr);  249.              result = br.readLine();  250.              251.        }catch (Exception e) {  252.            result = "{\"ret\":\"898\"}";  253.        }  254.    }  255.        return result;  256.          257.    }  258.      259.      260.}  
  相关解决方案