Http协议之content

用android 通过http协议提交数据至服务器 content的内容

代码如下:


private static JSONObject connUpload(String baseUrl, Map<String, String> params, String content) throws IOException, JSONException {

String end = "\r\n";
String hyphens = "--";
String boundary = UUID.randomUUID().toString().replace("-", "");

//将需求连接转换成实际链接 如加上手机的基本信息等。
String realUrl = HttpUtil.buildUrl(baseUrl);
LogUtil.i("realurl:" + realUrl);

URL url = new URL(realUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(TIMEOUT);

//Post 请求不能使用缓存
conn.setUseCaches(false);
conn.setDoOutput(true);
StringBuilder sb = new StringBuilder();
// sb.append("&userDto.chatMessage.receiver=" + msg.getReceiver());
// sb.append("&userDto.chatMessage.type=" + msg.getType());

conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
conn.setRequestProperty("enctype", "multipart/form-data;");

DataOutputStream writer = new DataOutputStream(conn.getOutputStream());

writer.writeBytes("Content-Type: multipart/form-data;boundary=" + boundary + end);
writer.writeBytes(hyphens + boundary + end);

if(params != null && params.size() > 0) {
for(String key : params.keySet()) {
sb.append("Content-Disposition: form-data; name=\"").append(key).append("\"").append(end).append(end).append(params.get(key)).append(end + hyphens).append(boundary).append(end);
}
}

writer.writeBytes(sb.toString());

// 构造DataOutputStream流
writer.writeBytes("Content-Disposition: form-data; " + "name=\"file\";filename=\"" + content + "\"" + end);
writer.writeBytes("Content-Type: multipart/form-data;" + end);
writer.writeBytes(end);

/* 取得文件的FileInputStream */
FileInputStream fStream = new FileInputStream(content);
/* 设定每次写入1024bytes */
byte[] buffer = new byte[Constant.NET_BUFF_SIZE];
int length = -1;
/* 从文件读取数据到缓冲区 */
while ((length = fStream.read(buffer)) != -1) {
/* 将数据写入DataOutputStream中 */
LogUtil.i("stream: "+length);
writer.write(buffer, 0, length);
}
writer.writeBytes(end);
fStream.close();

writer.writeBytes(hyphens + boundary + hyphens + end);
writer.flush();
writer.close();

//, Constant.CHARSET
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

sb = new StringBuilder();
char[] buff = new char[Constant.NET_BUFF_SIZE];
int flag = 0;
while((flag = reader.read(buff)) != -1) {
sb.append(buff, 0, flag);
}

reader.close();
conn.disconnect();

LogUtil.i("response:" + sb);

return new JSONObject(sb.toString());
}

Http协议之content,码迷,mamicode.com

时间: 2024-08-30 12:37:48

Http协议之content的相关文章

有关使用HTTP协议传输二进制文件

HTTP协议是基于字符(ASCII)的,当Content-Type项为text/xml,则内容是文本格式:当二进制格式时,Content-Type项为image/gif,就是了.例如,浏览器请求一张图片的数据包信息: 1.请求消息: 2.响应消息: 下面是二进制的数据区 由上可知,http协议中content中可以是纯二进制的. 通常上的理解,http协议中请求.相应都是以ascii字符方式传输,如果要传输二进制需要经过BASE64或MIME等编码(因为HTTP协议pop3.smtp邮件协议都是

Android中的跨进程通信方法实例及特点分析(二):ContentProvider

1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据,Android系统给我们提供了Content Provider使用,通过它能够訪问上面所说的数据.比如非常多音乐播放器中的扫描功能事实上就用到了Content Provider功能(当然,也有的播放器是自己去实现更底层的功能). 这种优点是统一管理,比方添加了某个音频文件,底层就会将这种变化通知Content Provider.从而当应用程序訪问

android 中管理短信

为了看代码方便,一边在网上google资料,一边看Android java 源代码. 偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mmssms.db中. 公开的SDK中没有这个类,不能直接使用.于是自己写了一个SQLiteOpenHelper,但是查询的时候发生SQL异常. 看来不能为所欲为了,不过据网上资料介绍可以拷贝db文件来实现短信数据备份. 既然每个db跟package名相关,建立了一个package为com.androi

Android笔记(五十四) Android四大组件之一——ContentProvider(一)

ContentProvider提供数据 在Android中,他的每个应用都是相互独立的,各自运行在自己的Dalvik虚拟机中,但现实使用中常常需要在多个应用之间进行数据交换,例如发短信需要获取联系人中的内容,QQ上传头像需要获取相册内容等等,Android为这种跨应用的数据交换提供了一个标准ContentProvider,用户实现自己的ContentProvider时,需要实现他规定的抽象方法: public boolean onCreate():该方法在ContentProvider创建后会被

Android中Intent对象与Intent Filter过滤匹配过程详解

如果对Intent不是特别了解,可以参见博文<Android中Intent概述及使用>,该文对本文要使用的action.category以及data都进行了详细介绍. 本文内容有点长,希望大家可以耐心读完. 本文在描述组件在manifest中注册的Intent Filter过滤器时,统一用intent-filter表示. 概述 我们知道,Intent是分两种的:显式Intent和隐式Intent.如果一个Intent明确指定了要启动的组件的完整类名,那么这个Intent就是显式Intent,否

android 管理手机短信

为了看代码方便,一边在网上google资料,一边看Android java 源代码. 偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mmssms.db中. 公开的SDK中没有这个类,不能直接使用.于是自己写了一个SQLiteOpenHelper,但是查询的时候发生SQL异常. 看来不能为所欲为了,不过据网上资料介绍可以拷贝db文件来实现短信数据备份. 既然每个db跟package名相关,建立了一个package为com.androi

Android开发之监听发出的短信

运行效果图: 预备知识: 为了监听指定的ContentProvider的数据的改变,需要通过ContentResolver向指定Uri注册CotentObserver监听器.ContentResolver提供了如下方法来注册监听器: publicfinal void registerContentObserver(Uriuri, boolean notifyForDescendents, ContentObserver observer) 参数:uri :该监听器所监听的ContentProvi

五大开源Web代理服务器的横向点评

Web 代理软件转发 HTTP 请求时并不会改变数据流量.它们可以配置成透明代理,而无需客户端配置.它们还可以作为反向代理放在网站的前端:这样缓存服务器可以为一台或多台 web 服务器提供无限量的用户服务. 网站代理功能多样,有着宽泛的用途:从缓存页面.DNS 和其他查询,到加速 web 服务器响应.降低带宽消耗.代理软件广泛用于大型高访问量的网站,比如纽约时报.卫报, 以及社交媒体网站如 Twitter.Facebook 和 Wikipedia. 页面缓存已经成为优化单位时间内所能吞吐的数据量

网络编程基础通信

物理层 高低电频 0101数据链路层 把数据封装 以太网协议 数据头(18字节) |数据 源mac 目标mac 数据类型 网卡 :mac 地址 电脑唯一的标识,网络层 ip协议 确定电脑所在的网络位置 ip :172.16.10.1:10101100.00010000.00001010.000000001 子网掩码(A,B,C三类) 常用的是C类:255255.255.255.0:11111111.11111111.11111111.00000000 通过AND运算 就可以判断在不在同一个网段了