1. import java.io.ByteArrayOutputStream;
  2. import java.io.InputStream;
  3. public class StreamTool {
  4. /**
  5. * 从输入流获取数据
  6. * @param inputStream
  7. * @return
  8. * @throws Exception
  9. */
  10. public static byte[] readInputStream(InputStream inputStream) throws Exception {
  11. byte[] buffer = new byte[1024]; //你可以根据实际需要调整缓存大小
  12. int len = -1;
  13. ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
  14. //以前我在学IO流时不写下句buffer,结果操作文件中无任何内容
  15. while( (len = inputStream.read(buffer)) != -1 ){
  16. outSteam.write(buffer, 0, len);
  17. }
  18. outSteam.close();
  19. inputStream.close();
  20. return outSteam.toByteArray();
  21. }
  22. }
  23. 通过Android客户端上传数据到服务器:可以上传简单的表单,也可以方便的上传带有附件的文件,此类远远比Android自身的HttpClient更高效、更易于使用
  24. import java.io.DataOutputStream;
  25. import java.io.InputStream;
  26. import java.net.HttpURLConnection;
  27. import java.net.URL;
  28. import java.net.URLEncoder;
  29. import java.util.ArrayList;
  30. import java.util.List;
  31. import java.util.Map;
  32. import org.apache.http.HttpResponse;
  33. import org.apache.http.NameValuePair;
  34. import org.apache.http.client.HttpClient;
  35. import org.apache.http.client.entity.UrlEncodedFormEntity;
  36. import org.apache.http.client.methods.HttpPost;
  37. import org.apache.http.impl.client.DefaultHttpClient;
  38. import org.apache.http.message.BasicNameValuePair;
  39. public class HttpRequester {
  40. /**
  41. * 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能:
  42. * <FORM METHOD=POST ACTION="http://192.168.0.1:8080/test.do" enctype="multipart/form-data">
  43. <INPUT TYPE="text" NAME="name">
  44. <INPUT TYPE="text" NAME="id">
  45. <input type="file" name="p_w_picpathfile"/>
  46. <input type="file" name="zip"/>
  47. </FORM>
  48. * @param actionUrl 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,http://192.168.1.10:8080这样的路径测试)
  49. * @param params 请求参数 key为参数名,value为参数值
  50. * @param file 上传文件
  51. */
  52. public static String post(String actionUrl, Map<String, String> params, FormFile[] files) {
  53. try {
  54. String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线
  55. String MULTIPART_FORM_DATA = "multipart/form-data";
  56. URL url = new URL(actionUrl);
  57. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  58. conn.setConnectTimeout(5* 1000);
  59. conn.setDoInput(true);//允许输入
  60. conn.setDoOutput(true);//允许输出
  61. conn.setUseCaches(false);//不使用Cache
  62. conn.setRequestMethod("POST");
  63. conn.setRequestProperty("Connection", "Keep-Alive");
  64. conn.setRequestProperty("Charset", "UTF-8");
  65. conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + ";
  66. boundary=" + BOUNDARY);
  67. StringBuilder sb = new StringBuilder();
  68. for (Map.Entry<String, String> entry : params.entrySet()) {//构建表单字段内容
  69. sb.append("--");
  70. sb.append(BOUNDARY);
  71. sb.append("\r\n");
  72. sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");
  73. sb.append(entry.getValue());
  74. sb.append("\r\n");
  75. }
  76. DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
  77. outStream.write(sb.toString().getBytes());//发送表单字段数据
  78. for(FormFile file : files){//发送文件数据
  79. StringBuilder split = new StringBuilder();
  80. split.append("--");
  81. split.append(BOUNDARY);
  82. split.append("\r\n");
  83. split.append("Content-Disposition: form-data;name=\""+
  84. file.getFormname()+"\";filename=\""+ file.getFilname() + "\"\r\n");
  85. split.append("Content-Type: "+ file.getContentType()+"\r\n\r\n");
  86. outStream.write(split.toString().getBytes());
  87. if(file.getInStream()!=null){
  88. byte[] buffer = new byte[1024];
  89. int len = 0;
  90. while((len = file.getInStream().read(buffer))!=-1){
  91. outStream.write(buffer, 0, len);
  92. }
  93. file.getInStream().close();
  94. }else{
  95. outStream.write(file.getData(), 0, file.getData().length);
  96. }
  97. outStream.write("\r\n".getBytes());
  98. }
  99. byte[] end_data = ("--" + BOUNDARY + "--\r\n").getBytes();//数据结束标志
  100. outStream.write(end_data);
  101. outStream.flush();
  102. int cah = conn.getResponseCode();
  103. if (cah != 200) throw new RuntimeException("请求url失败");
  104. InputStream is = conn.getInputStream();
  105. int ch;
  106. StringBuilder b = new StringBuilder();
  107. while( (ch = is.read()) != -1 ){
  108. b.append((char)ch);
  109. }
  110. outStream.close();
  111. conn.disconnect();
  112. return b.toString();
  113. } catch (Exception e) {
  114. throw new RuntimeException(e);
  115. }
  116. }
  117. /**
  118. * 提交数据到服务器
  119. * @param actionUrl 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.cnblogs.com/guoshiandroid或http://192.168.1.10:8080这样的路径测试)
  120. * @param params 请求参数 key为参数名,value为参数值
  121. * @param file 上传文件
  122. */
  123. public static String post(String actionUrl, Map<String, String> params, FormFile file) {
  124. return post(actionUrl, params, new FormFile[]{file});
  125. }
  126. public static byte[] postFromHttpClient(String path, Map<String, String> params, String encode) throws Exception{
  127. List<NameValuePair> formparams = new ArrayList<NameValuePair>();//用于存放请求参数
  128. for(Map.Entry<String, String> entry : params.entrySet()){
  129. formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
  130. }
  131. UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
  132. HttpPost httppost = new HttpPost(path);
  133. httppost.setEntity(entity);
  134. HttpClient httpclient = new DefaultHttpClient();//看作是浏览器
  135. HttpResponse response = httpclient.execute(httppost);//发送post请求
  136. return StreamTool.readInputStream(response.getEntity().getContent());
  137. }
  138. /**
  139. * 发送请求
  140. * @param path 请求路径
  141. * @param params 请求参数 key为参数名称 value为参数值
  142. * @param encode 请求参数的编码
  143. */
  144. public static byte[] post(String path, Map<String, String> params, String encode) throws Exception{
  145. //String params = "method=save&name="+ URLEncoder.encode("国士工作室", "UTF-8")+ "&age=28&";//需要发送的参数
  146. StringBuilder parambuilder = new StringBuilder("");
  147. if(params!=null && !params.isEmpty()){
  148. for(Map.Entry<String, String> entry : params.entrySet()){
  149. parambuilder.append(entry.getKey()).append("=")
  150. .append(URLEncoder.encode(entry.getValue(), encode)).append("&");
  151. }
  152. parambuilder.deleteCharAt(parambuilder.length()-1);
  153. }
  154. byte[] data = parambuilder.toString().getBytes();
  155. URL url = new URL(path);
  156. HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  157. conn.setDoOutput(true);//允许对外发送请求参数
  158. conn.setUseCaches(false);//不进行缓存
  159. conn.setConnectTimeout(5 * 1000);
  160. conn.setRequestMethod("POST");
  161. //下面设置http请求头
  162. conn.setRequestProperty("Accept", "p_w_picpath/gif, p_w_picpath/jpeg, p_w_picpath/pjpeg, p_w_picpath/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
  163. conn.setRequestProperty("Accept-Language", "zh-CN");
  164. conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
  165. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  166. conn.setRequestProperty("Content-Length", String.valueOf(data.length));
  167. conn.setRequestProperty("Connection", "Keep-Alive");
  168. //发送参数
  169. DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
  170. outStream.write(data);//把参数发送出去
  171. outStream.flush();
  172. outStream.close();
  173. if(conn.getResponseCode()==200){
  174. return StreamTool.readInputStream(conn.getInputStream());
  175. }
  176. return null;
  177. }
  178. }

转载于:https://blog.51cto.com/mzh3344258/687233

从输入流中获取数据并以字节数组返回相关推荐

  1. 是用JDBC从数据库中获取数据并以java对象返回

    /*** * @param c* for example Person.class* @param primaryKeys* primaryKeys为主键,参数顺序和表中保持一致 如果id, name ...

  2. [转]Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]

    转自:http://www.cnblogs.com/stg609/archive/2008/08/03/1259206.html 接着上一篇讲 3.4 读取剩余的请求       前面我们已经提到过R ...

  3. Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]

        接着上一篇讲 3.4 读取剩余的请求       前面我们已经提到过ReadEntityBody (Byte[] buffer, Int32 size)方法,该方法可以用来读取客户端的请求数据 ...

  4. OC从plist文件中获取数据

    怎样从plist文件中读取数据,这个和反归档相似,但是也存在着区别,比如说不用解码,当然一般我们获取的数据往往是对一个对象的描述,而且数据的个数也不是一个,因此我们有必要来说一下怎样完整的从plist ...

  5. C#从剪贴板中获取数据

    今天我们同学问我如何利用C#把剪贴板里的图片存出来,我看了看,非常简单 IDataObject data = Clipboard.GetDataObject();//从剪贴板中获取数据 if(data ...

  6. c从sqlite3数据库中获取数据,并对数据进行拼接

    c从sqlite3数据库中获取数据,并对数据进行拼接 函数功能 对数据库的操作 创建数据库: 创建USER表: 创建表内数据: 查看表内数据: 查看表结构: 函数实现 函数编译: 函数结果: 函数功能 ...

  7. ​​​​​​​​​​​​​​使用dom方式遍历文档||获取元素||从元素中获取数据

    使用dom方式遍历文档 获取元素 根据id查询元素getElementById 根据标签获取元素getElementsByTag 根据class获取元素getElementsByClass 根据属性获 ...

  8. getdata提取曲线数据_Origin如何从图表中获取数据

    点击上方"蓝字",一起愉快的玩耍吧!Origin如何从图表中获取数据01图片分析软件安装 一.GetData Graph Digitizer安装 使用范围: 1.需要引用别人文章中 ...

  9. Vue项目中获取数据后使用swiper轮播,无法轮播且 autoplay 和 loop 失效问题!

    Vue项目中获取数据后使用swiper轮播,无法轮播且 autoplay 和 loop 失效问题! 问题表现:轮播组件显示第一张图,可拖动但无法切换到下一张图.但是F12控制台切换屏幕后能正常轮播但无 ...

最新文章

  1. 【 NLS 】Newton – Raphson Iteration Procedure of TOA - Based Positioning
  2. electron——初探
  3. Caused by: java.lang.ClassNotFoundException: Didn't find class android.support.v4.view.ViewPager
  4. 送一些豆瓣 8.9 分优质书,啃完拿下 BAT 高薪 offer 不是梦!
  5. c语言不被O2优化,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
  6. 前端学习(1810):前端调试之css装饰cursor
  7. 信息学奥赛一本通 1092:求出e的值 | OpenJudge NOI 1.5 35
  8. 怎样才能有德国煤矿那样严密的安全网?
  9. vsftpd增加用户 linux,Ubuntu Linux中vsFTP添加用户
  10. php中函数封装怎么弄,php封装函数步骤
  11. go 判断元素是否在slice_golang 判断 两个slice 是否相等
  12. 值得终身背诵的道家名言50句,拔高人生境界
  13. 一款陌生人状态社交软件--same
  14. 39、C++定义一个类,实现向量的加减运算
  15. java8-常用stream操作(1)
  16. FPGA学习之毛刺问题
  17. 苹果手机怎么创建php,怎么在苹果官网注册Apple ID?在网页上创建Apple ID教程
  18. 最小确诊病例仅2岁!疫情随时变化,及时获取官方信息很有必要
  19. 基于Matlab的多普勒脉冲雷达回波仿真
  20. 一千万条数据,怎么快速查询

热门文章

  1. 【AutoML】当前有哪些可用的AutoML平台?
  2. 【学习・求职必备】可谓是相当Awesomes了,这些综述类的github项目你不可错过!...
  3. 中国食用香精行业品牌策略与销售渠道分析报告2022-2028年
  4. 全球与中国硬膜外托盘市场调研分析与“十四五”前景预测展望报告2021-2027年版
  5. php 某一天时间凌晨,PHP获得今天 天凌晨时间戳的例子
  6. 百万农民创大业-农业大健康:产业融合谋定振兴乡村唱大戏
  7. WPF控件textBox多行输入设置
  8. PHP (20140506)
  9. iPhone开发入门守则:Objective-C编码规范--系列教程
  10. allegro约束设置