从输入流中获取数据并以字节数组返回
- import java.io.ByteArrayOutputStream;
- import java.io.InputStream;
- public class StreamTool {
- /**
- * 从输入流获取数据
- * @param inputStream
- * @return
- * @throws Exception
- */
- public static byte[] readInputStream(InputStream inputStream) throws Exception {
- byte[] buffer = new byte[1024]; //你可以根据实际需要调整缓存大小
- int len = -1;
- ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
- //以前我在学IO流时不写下句buffer,结果操作文件中无任何内容
- while( (len = inputStream.read(buffer)) != -1 ){
- outSteam.write(buffer, 0, len);
- }
- outSteam.close();
- inputStream.close();
- return outSteam.toByteArray();
- }
- }
- 通过Android客户端上传数据到服务器:可以上传简单的表单,也可以方便的上传带有附件的文件,此类远远比Android自身的HttpClient更高效、更易于使用
- import java.io.DataOutputStream;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.net.URLEncoder;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import org.apache.http.HttpResponse;
- import org.apache.http.NameValuePair;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.message.BasicNameValuePair;
- public class HttpRequester {
- /**
- * 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能:
- * <FORM METHOD=POST ACTION="http://192.168.0.1:8080/test.do" enctype="multipart/form-data">
- <INPUT TYPE="text" NAME="name">
- <INPUT TYPE="text" NAME="id">
- <input type="file" name="p_w_picpathfile"/>
- <input type="file" name="zip"/>
- </FORM>
- * @param actionUrl 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,http://192.168.1.10:8080这样的路径测试)
- * @param params 请求参数 key为参数名,value为参数值
- * @param file 上传文件
- */
- public static String post(String actionUrl, Map<String, String> params, FormFile[] files) {
- try {
- String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线
- String MULTIPART_FORM_DATA = "multipart/form-data";
- URL url = new URL(actionUrl);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.setConnectTimeout(5* 1000);
- conn.setDoInput(true);//允许输入
- conn.setDoOutput(true);//允许输出
- conn.setUseCaches(false);//不使用Cache
- 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 outStream = new DataOutputStream(conn.getOutputStream());
- outStream.write(sb.toString().getBytes());//发送表单字段数据
- for(FormFile file : files){//发送文件数据
- StringBuilder split = new StringBuilder();
- split.append("--");
- split.append(BOUNDARY);
- split.append("\r\n");
- split.append("Content-Disposition: form-data;name=\""+
- file.getFormname()+"\";filename=\""+ file.getFilname() + "\"\r\n");
- split.append("Content-Type: "+ file.getContentType()+"\r\n\r\n");
- outStream.write(split.toString().getBytes());
- if(file.getInStream()!=null){
- byte[] buffer = new byte[1024];
- int len = 0;
- while((len = file.getInStream().read(buffer))!=-1){
- outStream.write(buffer, 0, len);
- }
- file.getInStream().close();
- }else{
- outStream.write(file.getData(), 0, file.getData().length);
- }
- outStream.write("\r\n".getBytes());
- }
- byte[] end_data = ("--" + BOUNDARY + "--\r\n").getBytes();//数据结束标志
- outStream.write(end_data);
- outStream.flush();
- int cah = conn.getResponseCode();
- if (cah != 200) throw new RuntimeException("请求url失败");
- InputStream is = conn.getInputStream();
- int ch;
- StringBuilder b = new StringBuilder();
- while( (ch = is.read()) != -1 ){
- b.append((char)ch);
- }
- outStream.close();
- conn.disconnect();
- return b.toString();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- /**
- * 提交数据到服务器
- * @param actionUrl 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.cnblogs.com/guoshiandroid或http://192.168.1.10:8080这样的路径测试)
- * @param params 请求参数 key为参数名,value为参数值
- * @param file 上传文件
- */
- public static String post(String actionUrl, Map<String, String> params, FormFile file) {
- return post(actionUrl, params, new FormFile[]{file});
- }
- public static byte[] postFromHttpClient(String path, Map<String, String> params, String encode) throws Exception{
- List<NameValuePair> formparams = new ArrayList<NameValuePair>();//用于存放请求参数
- for(Map.Entry<String, String> entry : params.entrySet()){
- formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
- }
- UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
- HttpPost httppost = new HttpPost(path);
- httppost.setEntity(entity);
- HttpClient httpclient = new DefaultHttpClient();//看作是浏览器
- HttpResponse response = httpclient.execute(httppost);//发送post请求
- return StreamTool.readInputStream(response.getEntity().getContent());
- }
- /**
- * 发送请求
- * @param path 请求路径
- * @param params 请求参数 key为参数名称 value为参数值
- * @param encode 请求参数的编码
- */
- public static byte[] post(String path, Map<String, String> params, String encode) throws Exception{
- //String params = "method=save&name="+ URLEncoder.encode("国士工作室", "UTF-8")+ "&age=28&";//需要发送的参数
- StringBuilder parambuilder = new StringBuilder("");
- if(params!=null && !params.isEmpty()){
- for(Map.Entry<String, String> entry : params.entrySet()){
- parambuilder.append(entry.getKey()).append("=")
- .append(URLEncoder.encode(entry.getValue(), encode)).append("&");
- }
- parambuilder.deleteCharAt(parambuilder.length()-1);
- }
- byte[] data = parambuilder.toString().getBytes();
- URL url = new URL(path);
- HttpURLConnection conn = (HttpURLConnection)url.openConnection();
- conn.setDoOutput(true);//允许对外发送请求参数
- conn.setUseCaches(false);//不进行缓存
- conn.setConnectTimeout(5 * 1000);
- conn.setRequestMethod("POST");
- //下面设置http请求头
- 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, */*");
- conn.setRequestProperty("Accept-Language", "zh-CN");
- 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)");
- conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
- conn.setRequestProperty("Content-Length", String.valueOf(data.length));
- conn.setRequestProperty("Connection", "Keep-Alive");
- //发送参数
- DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
- outStream.write(data);//把参数发送出去
- outStream.flush();
- outStream.close();
- if(conn.getResponseCode()==200){
- return StreamTool.readInputStream(conn.getInputStream());
- }
- return null;
- }
- }
转载于:https://blog.51cto.com/mzh3344258/687233
从输入流中获取数据并以字节数组返回相关推荐
- 是用JDBC从数据库中获取数据并以java对象返回
/*** * @param c* for example Person.class* @param primaryKeys* primaryKeys为主键,参数顺序和表中保持一致 如果id, name ...
- [转]Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]
转自:http://www.cnblogs.com/stg609/archive/2008/08/03/1259206.html 接着上一篇讲 3.4 读取剩余的请求 前面我们已经提到过R ...
- Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]
接着上一篇讲 3.4 读取剩余的请求 前面我们已经提到过ReadEntityBody (Byte[] buffer, Int32 size)方法,该方法可以用来读取客户端的请求数据 ...
- OC从plist文件中获取数据
怎样从plist文件中读取数据,这个和反归档相似,但是也存在着区别,比如说不用解码,当然一般我们获取的数据往往是对一个对象的描述,而且数据的个数也不是一个,因此我们有必要来说一下怎样完整的从plist ...
- C#从剪贴板中获取数据
今天我们同学问我如何利用C#把剪贴板里的图片存出来,我看了看,非常简单 IDataObject data = Clipboard.GetDataObject();//从剪贴板中获取数据 if(data ...
- c从sqlite3数据库中获取数据,并对数据进行拼接
c从sqlite3数据库中获取数据,并对数据进行拼接 函数功能 对数据库的操作 创建数据库: 创建USER表: 创建表内数据: 查看表内数据: 查看表结构: 函数实现 函数编译: 函数结果: 函数功能 ...
- 使用dom方式遍历文档||获取元素||从元素中获取数据
使用dom方式遍历文档 获取元素 根据id查询元素getElementById 根据标签获取元素getElementsByTag 根据class获取元素getElementsByClass 根据属性获 ...
- getdata提取曲线数据_Origin如何从图表中获取数据
点击上方"蓝字",一起愉快的玩耍吧!Origin如何从图表中获取数据01图片分析软件安装 一.GetData Graph Digitizer安装 使用范围: 1.需要引用别人文章中 ...
- Vue项目中获取数据后使用swiper轮播,无法轮播且 autoplay 和 loop 失效问题!
Vue项目中获取数据后使用swiper轮播,无法轮播且 autoplay 和 loop 失效问题! 问题表现:轮播组件显示第一张图,可拖动但无法切换到下一张图.但是F12控制台切换屏幕后能正常轮播但无 ...
最新文章
- 【 NLS 】Newton – Raphson Iteration Procedure of TOA - Based Positioning
- electron——初探
- Caused by: java.lang.ClassNotFoundException: Didn't find class android.support.v4.view.ViewPager
- 送一些豆瓣 8.9 分优质书,啃完拿下 BAT 高薪 offer 不是梦!
- c语言不被O2优化,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
- 前端学习(1810):前端调试之css装饰cursor
- 信息学奥赛一本通 1092:求出e的值 | OpenJudge NOI 1.5 35
- 怎样才能有德国煤矿那样严密的安全网?
- vsftpd增加用户 linux,Ubuntu Linux中vsFTP添加用户
- php中函数封装怎么弄,php封装函数步骤
- go 判断元素是否在slice_golang 判断 两个slice 是否相等
- 值得终身背诵的道家名言50句,拔高人生境界
- 一款陌生人状态社交软件--same
- 39、C++定义一个类,实现向量的加减运算
- java8-常用stream操作(1)
- FPGA学习之毛刺问题
- 苹果手机怎么创建php,怎么在苹果官网注册Apple ID?在网页上创建Apple ID教程
- 最小确诊病例仅2岁!疫情随时变化,及时获取官方信息很有必要
- 基于Matlab的多普勒脉冲雷达回波仿真
- 一千万条数据,怎么快速查询
热门文章
- 【AutoML】当前有哪些可用的AutoML平台?
- 【学习・求职必备】可谓是相当Awesomes了,这些综述类的github项目你不可错过!...
- 中国食用香精行业品牌策略与销售渠道分析报告2022-2028年
- 全球与中国硬膜外托盘市场调研分析与“十四五”前景预测展望报告2021-2027年版
- php 某一天时间凌晨,PHP获得今天 天凌晨时间戳的例子
- 百万农民创大业-农业大健康:产业融合谋定振兴乡村唱大戏
- WPF控件textBox多行输入设置
- PHP (20140506)
- iPhone开发入门守则:Objective-C编码规范--系列教程
- allegro约束设置