HttpUrlConnection支持Header,Body传值,支持Multipart上传文件
来源:互联网 发布:java xml dom 编辑:程序博客网 时间:2024/05/18 02:21
Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件:
public static String post(String actionUrl, Map<String, String> headParams,Map<String, String> params,Map<String, File> files) throws IOException {String BOUNDARY = java.util.UUID.randomUUID().toString();String PREFIX = "--", LINEND = "\r\n";String MULTIPART_FROM_DATA = "multipart/form-data";String CHARSET = "UTF-8";URL uri = new URL(actionUrl);HttpURLConnection conn = (HttpURLConnection) uri.openConnection();conn.setReadTimeout(30 * 1000); // 缓存的最长时间conn.setDoInput(true);// 允许输入conn.setDoOutput(true);// 允许输出conn.setUseCaches(false); // 不允许使用缓存conn.setRequestMethod("POST");conn.setRequestProperty("connection", "keep-alive");conn.setRequestProperty("Charsert", "UTF-8");conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA+ ";boundary=" + BOUNDARY);if(headParams!=null){for(String key : headParams.keySet()){conn.setRequestProperty(key, headParams.get(key));}}StringBuilder sb = new StringBuilder();if (params!=null) {// 首先组拼文本类型的参数for (Map.Entry<String, String> entry : params.entrySet()) {sb.append(PREFIX);sb.append(BOUNDARY);sb.append(LINEND);sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"" + LINEND);sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);sb.append("Content-Transfer-Encoding: 8bit" + LINEND);sb.append(LINEND);sb.append(entry.getValue());sb.append(LINEND);}}DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());if (!TextUtils.isEmpty(sb.toString())) {outStream.write(sb.toString().getBytes());}// 发送文件数据if (files != null)for (Map.Entry<String, File> file : files.entrySet()) {StringBuilder sb1 = new StringBuilder();sb1.append(PREFIX);sb1.append(BOUNDARY);sb1.append(LINEND);sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""+ file.getKey() + "\"" + LINEND);sb1.append("Content-Type: application/octet-stream; charset="+ CHARSET + LINEND);sb1.append(LINEND);outStream.write(sb1.toString().getBytes());InputStream is = new FileInputStream(file.getValue());byte[] buffer = new byte[1024];int len = 0;while ((len = is.read(buffer)) != -1) {outStream.write(buffer, 0, len);Log.i("HttpUtil", "写入中...");}is.close();outStream.write(LINEND.getBytes());}// 请求结束标志byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();outStream.write(end_data);outStream.flush();Log.i("HttpUtil", "conn.getContentLength():"+conn.getContentLength());// 得到响应码int res = conn.getResponseCode();InputStream in = conn.getInputStream();if (res == 200) { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8")); StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = bufferedReader.readLine()) != null){ buffer.append(line); } //int ch;//StringBuilder sb2 = new StringBuilder();//while ((ch = in.read()) != -1) {//sb2.append((char) ch);//}return buffer.toString();}outStream.close();conn.disconnect();return in.toString();}
0 1
- HttpUrlConnection支持Header,Body传值,支持Multipart上传文件
- 分享一个volley支持 multipart上传文件
- 分享一个volley支持 multipart上传文件
- HttpUrlconnection 实现大文件分片断点上传,支持Https
- multipart方式上传图片(HttpURLConnection)
- CppCMS支持文件上传
- 文件上传,支持批量上传
- 让UpdatePanel支持上传文件
- Servlet 3.0文件上传支持
- spring 支持文件上传配置
- java 文件上传支持断点续传
- IE8 springmvc支持文件上传
- springmvc支持多文件上传
- android 支持WebView上传文件
- SpringMVC multipart文件上传
- SpringMVC multipart(文件上传)
- SpringMVC multipart文件上传
- SpringMVC multipart文件上传
- MySQL_数据库数据类型(data type)介绍
- FragmentTransaction&Activity的状态
- IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总
- 斐波那契数列的实现
- Linux文件锁定
- HttpUrlConnection支持Header,Body传值,支持Multipart上传文件
- Cocos2d-x v3.0物理系统 利用PhysicsEditor创建多边形
- Java单例模式
- WebRTC 初览(2) getUserMedia 介绍二
- Ubuntu 12.04 安装TFTP server
- XCode6打包收不到推送问题(信鸽)
- 初识Dubbo 系列之3-Dubbo 快速启动
- Android 添加系统服务
- Java基础第十六天--File类及递归