用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的更多相关文章

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

    HTTP协议是基于字符(ASCII)的,当Content-Type项为text/xml,则内容是文本格式:当二进制格式时,Content-Type项为image/gif,就是了.例如,浏览器请求一张图 ...

  2. 从Nodejs脚本到vue首页看开源始末的DemoHouse

    最近上Github看见了大漠的DemoHouse项目,看到Issues说准备做一个首页,于是我的第一想法就是做一个md列表页面,md文件可以很容易的生成一个html文件.刚刚做好脚本文件,可以生成li ...

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

    1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据.Android系统给我们提供了Content P ...

  4. Android开发之监听发出的短信

    执行效果图: 预备知识: 为了监听指定的ContentProvider的数据的改变,须要通过ContentResolver向指定Uri注冊CotentObserver监听器.ContentResolv ...

  5. Anndroid 使用相机或相册打开图片

    安卓操作相机or相册 笔者做这方面测试的时候,没遇到什么大坑基本上,需要注意的有两点 1.   使用相册打开读取图片需要使用运行时权限,而且还是要在AndroidManifest.xml中进行权限声明 ...

  6. VSCode插件开发全攻略(五)跳转到定义、自动补全、悬停提示

    更多文章请戳VSCode插件开发全攻略系列目录导航. 跳转到定义 跳转到定义其实很简单,通过vscode.languages.registerDefinitionProvider注册一个provide ...

  7. [android] 内容提供者实现

    [android] 内容提供者实现 上一节的主机名类似网络上的域名,协议是content://,可以定义一下规则 content://主机名/insert 添加操作 content://主机名/del ...

  8. JavaAndroid开发部分API

    JavaAndroid开发中的部分系统API 四大组件,都需要在清单文件中配置 Activity: 用来提供一个能让用户操作并与之交互的界面 onCreate(): 自动调用的方法, 在其中加载布局显 ...

  9. android 管理手机短信

    为了看代码方便,一边在网上google资料,一边看Android java 源代码. 偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mm ...

随机推荐

  1. Harry and magic string HDU - 5157 记录不相交的回文串对数

    题意: 记录不相交的回文串对数 题解: 正着反着都来一遍回文树 用sum1[i] 表示到 i 位置,出现的回文串个数的前缀和 sun2[i]表示反着的个数 ans+=sum1[i-1]*sum2[i] ...

  2. 【23. 合并K个排序链表】【困难】【优先队列/堆排序】

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6] 输出: 1->1-> ...

  3. sql (6) exists

    SQL中EXISTS的用法 查询所有选修了1号课程的学生的姓名,年龄,性别首先取Student表中的一个元组,然后在SC表中依次找SC.Sno=该元组的So,并且对应的Cno='2',如果存在,则外层 ...

  4. bootsrap-----固定布局解析

    <div class="container"> container </div> .container { .container-fixed();容器的wi ...

  5. leetcood学习笔记-53*-最大子列和

    题目描述: 方法一:O(N) class Solution(object): def maxSubArray(self, nums): sum = 0 max_sub_sum = nums[0] fo ...

  6. response.text与content的区别

    在某些情况下来说,response.text 与 response.content 都是来获取response中的数据信息,效果看起来差不多.那么response.text 和 response.co ...

  7. 基于vue,通过父组件触发子组件的请求,等请求完毕以后,显示子组件,同时隐藏父组件

    正常情况下,子组件应该尽量减少业务逻辑,而应该将业务逻辑放到父组件里面,从而减少耦合,但是当 我们不得不用到这种情况时,可以采用下面的思路 解决方案 尽量将请求单独作为一个函数(不要将请求放到show ...

  8. Eclipse中如何使用Hibernate

    首先创建一个java web项目,其目录如下: (1)创建文件夹hibernate4(用于存放下载的hibernate工具包lib/required文件夹下所有的jar包),jar包目录如下: (2) ...

  9. 暑假集训test-8-26

    真 noip模拟题 但是被我做得稀巴烂 新高二除了林巨做得勉强能看,其他人都做得稀巴烂 老张都要绝望了 t1.水呀水 题如其名是道水题.新建个点代表水源,跑最小生成树即可. //Achen #incl ...

  10. mongodb操作指令(二):索引,聚合,管道

    索引 索引本质上是树,最小的值在最左边的叶子上,最大的值在最右边的叶子上,使用索引可以提高查询速度(而不用全表扫描),也可以预防脏数据的插入(如唯一索引) 索引通常能够极大的提高查询的效率, 如果没有 ...