使用HttpURLConnection通过POST方式提交请求数据,并上传文件
来源:互联网 发布:语音软件排行 编辑:程序博客网 时间:2024/06/05 07:43
import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;import java.util.Map;import java.util.UUID;public class MyHttpUploader { /** * 使用HttpURLConnection通过POST方式提交请求,并上传文件。 * * @param actionUrl * 访问的url * @param textParams * 文本类型的POST参数(key:value) * @param filePaths * 文件路径的集合 * @return 服务器返回的数据,出现异常时返回 null */ public static String httpPostWithFiles(String actionUrl, Map<String, String> textParams, List<String> filePaths) { BufferedReader br = null; DataOutputStream outStream = null; HttpURLConnection conn = null; InputStream is=null; try { final String BOUNDARY = UUID.randomUUID().toString(); final String PREFIX = "--"; final String LINE_END = "\r\n"; final String MULTIPART_FROM_DATA = "multipart/form-data"; final String CHARSET = "UTF-8"; URL uri = new URL(actionUrl); conn = (HttpURLConnection) uri.openConnection(); // 缓存大小 conn.setChunkedStreamingMode(1024 * 64); // 超时 conn.setReadTimeout(50 * 1000); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("connection", "keep-alive"); conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY); // 拼接文本类型的参数 StringBuilder textSb = new StringBuilder(); if (textParams != null && textParams.size()>0) { for (Map.Entry<String, String> entry : textParams.entrySet()) { textSb.append(PREFIX).append(BOUNDARY).append(LINE_END); textSb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINE_END); textSb.append("Content-Type: text/plain; charset=" + CHARSET + LINE_END); textSb.append("Content-Transfer-Encoding: 8bit" + LINE_END); textSb.append(LINE_END); textSb.append(entry.getValue()); textSb.append(LINE_END); } } outStream = new DataOutputStream(conn.getOutputStream()); outStream.write(textSb.toString().getBytes()); //System.out.println(textSb.toString()); // 发送文件数据 if (filePaths != null && filePaths.size()>0) { for (int i = 0; i < filePaths.size(); i++) { String _filePath = filePaths.get(i); StringBuilder fileSb = new StringBuilder(); fileSb.append(PREFIX).append(BOUNDARY).append(LINE_END); fileSb.append("Content-Disposition: form-data; name=\"files" + (i + 1) + "\"; filename=\"" + _filePath.substring(_filePath.lastIndexOf("/") + 1) + "\"" + LINE_END); fileSb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END); fileSb.append(LINE_END); //System.out.println(fileSb.toString()); outStream.write(fileSb.toString().getBytes()); is = new FileInputStream(_filePath); byte[] buffer = new byte[1024 * 8]; int len; while ((len = is.read(buffer)) != -1) { outStream.write(buffer, 0, len); } outStream.write(LINE_END.getBytes()); } } // 请求结束标志 outStream.write((PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes()); outStream.flush(); // 得到响应码 int responseCode = conn.getResponseCode(); br = new BufferedReader(new InputStreamReader(conn.getInputStream(), CHARSET)); StringBuilder resultSb = null; String line; if (responseCode == 200) { resultSb = new StringBuilder(); while ((line = br.readLine()) != null) { resultSb.append(line).append("\n"); } } return resultSb == null ? null : resultSb.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if(is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if (outStream != null) { try { outStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (conn != null) { conn.disconnect(); } } return null; }}
下面的测试类
package sy.controller.news;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.TreeMap;import sy.common.exception.LcsTipException;import sy.util.HttpClientUtils;import sy.util.MD5;public class Main { public static void main(String[] args) throws Exception { main2(); } public static void main2() { String url="http://localhost/demoWeb/fileUpload/fileAccept.do"; List<String> filePathsList=new ArrayList<String>(); filePathsList.add("C:\\aa\\bb\\eee.png"); filePathsList.add("C:\\aa\\bb\\shala2016.png"); Map<String, String> params=new HashMap<String, String>(); params.put("content", "这里是content内容哦"); params.put("mobile", "185XXXXXXXX"); String aaa=new MyHttpUploader().httpPostWithFiles(url, params, filePathsList); System.out.println("返回结果:"+aaa); }}
0 0
- 使用HttpURLConnection通过POST方式提交请求数据,并上传文件
- 使用HttpURLConnection通过GET、POST请求数据
- 使用HttpUrlConnection进行post请求上传文件
- 使用HttpUrlConnection进行post请求上传文件
- 使用HttpUrlConnection进行post请求上传文件
- 使用HttpUrlConnection进行post请求上传文件
- 使用HttpURLConnection采用Post方式请求数据
- 使用HttpURLConnection采用Post方式请求数据
- Java 通过HttpURLConnection Post方式提交xml,并从服务端返回数据
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- android 使用HttpURLConnection方式提交get/post请求
- 使用HttpURLConnection采用get方式或post方式请求数据
- Android使用HttpURLConnection进行POST请求,向服务器上传数据
- HttpURLconnection使用POST方式提交JSON数据给服务器
- HttpURLconnection使用POST方式提交JSON数据给服务器
- 使用HttpURlConnection 发送POST请求上传文件(带参数)
- mysql按照时间分区
- 考研,调剂,找工作讲座
- UnityEditor 布局(window layout)
- npm构建cordova,ionic项目步骤
- Unity3D学习笔记(1)---界面初识与环境熟悉
- 使用HttpURLConnection通过POST方式提交请求数据,并上传文件
- 二分查找法的实现和应用汇总
- C语言 · 完美的代价
- TCP/IP,http,socket,长连接,短连接
- OpenCV(3.2)+Python(3.6)学习(基于官方API)(二)
- 分表SQL
- Swift开发中的常用开源项目连接
- JS学习笔记.基础篇
- 拷贝构造函数应用场景分析