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);
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()) {
if(params.get(key) != null) {
writer.writeBytes("Content-Disposition: form-data; name=\""+ key + "\"" + end + end);
//注意此处不能用writeBytes 不然会出现乱码问题
writer.writeUTF(params.get(key));
writer.writeBytes(end + hyphens + boundary + end);
}
}
} // 构造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) {
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的更多相关文章
- 有关使用HTTP协议传输二进制文件
HTTP协议是基于字符(ASCII)的,当Content-Type项为text/xml,则内容是文本格式:当二进制格式时,Content-Type项为image/gif,就是了.例如,浏览器请求一张图 ...
- 从Nodejs脚本到vue首页看开源始末的DemoHouse
最近上Github看见了大漠的DemoHouse项目,看到Issues说准备做一个首页,于是我的第一想法就是做一个md列表页面,md文件可以很容易的生成一个html文件.刚刚做好脚本文件,可以生成li ...
- Android中的跨进程通信方法实例及特点分析(二):ContentProvider
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据.Android系统给我们提供了Content P ...
- Android开发之监听发出的短信
执行效果图: 预备知识: 为了监听指定的ContentProvider的数据的改变,须要通过ContentResolver向指定Uri注冊CotentObserver监听器.ContentResolv ...
- Anndroid 使用相机或相册打开图片
安卓操作相机or相册 笔者做这方面测试的时候,没遇到什么大坑基本上,需要注意的有两点 1. 使用相册打开读取图片需要使用运行时权限,而且还是要在AndroidManifest.xml中进行权限声明 ...
- VSCode插件开发全攻略(五)跳转到定义、自动补全、悬停提示
更多文章请戳VSCode插件开发全攻略系列目录导航. 跳转到定义 跳转到定义其实很简单,通过vscode.languages.registerDefinitionProvider注册一个provide ...
- [android] 内容提供者实现
[android] 内容提供者实现 上一节的主机名类似网络上的域名,协议是content://,可以定义一下规则 content://主机名/insert 添加操作 content://主机名/del ...
- JavaAndroid开发部分API
JavaAndroid开发中的部分系统API 四大组件,都需要在清单文件中配置 Activity: 用来提供一个能让用户操作并与之交互的界面 onCreate(): 自动调用的方法, 在其中加载布局显 ...
- android 管理手机短信
为了看代码方便,一边在网上google资料,一边看Android java 源代码. 偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mm ...
随机推荐
- 04E: Sub-process /usr/bin/dpkg returned an error code (1)
- 如果json中的key需要首字母大写怎么解决?
一般我们命名都是驼峰式的,可是有时候和第三方接口打交道,也会遇到一些奇葩,比如首字母大写........额 这是个什么鬼,对方这么要求,那我们也得这么写呀. 于是乎,第一种方式:把类中的字段首字母大写 ...
- java Twain 直接打印/界面打印
这两天,在搞归档系统.需要用到Twain协议来驱动扫描仪. 找了两天,java的twain操作资料真的不多.而且我还是要找直接打印的功能. 后来只能静下心来看类库和源码.最后搞定他. 打印方式分为3种 ...
- HTML学习笔记 表单元素
<form></form>代表表单 action:往什么地方提交 method:提交方式 get显示提交(不安全) post隐视提交(安全) 提交内容: name=输入的 ...
- JLOI 2013 卡牌游戏 bzoj3191
题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把 ...
- BZOJ 4557 (JLOI 2016) 侦查守卫
4557: [JLoi2016]侦察守卫 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 493 Solved: 342 [Submit][Status ...
- vuex的简单介绍
.vuex的定义 )Vuex 是一个专门为 Vue.js 应用程序开发的状态管理模式,使用插件的形式引进项目中 )集中存储和管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化 ...
- day 62 Django基础之jQuery操作cookie
Django基础之jQuery操作cookie jquery之cookie操作 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术: 下载与引入:jquery. ...
- KVM热添加技术
1.KVM热添加的种类 硬盘.网卡.内存.cpu 2.KVM热添加硬盘 1.在宿主机上创建硬盘 qemu-img create -f qcow2 /opt/web02_add01.qcow2 10G ...
- JavaScript开发人员必知的10个关键习惯
还在一味没有目的的编写JavaScript代码吗?那么你就OUT了!让我们一起来看看小编为大家搜罗的JavaScript开发人员应该具备的十大关键习惯吧! 随着新技术的不断发展,JavaScript已 ...