关于android Http访问,上传,用了三个方法
16lz
2021-01-23
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.}
更多相关文章
- Android中XML格式数据的简单使用
- android实现上传
- android 上传/下载 图片
- Android使用Retrofit上传单个文件以及多个文件
- Android拍照上传代码样例
- android 通过ContentResolver获得联系人数据
- android实现ftp上传、下载,支持文件夹
- Android Afinal框架学习(一) FinalDb 数据库操作