//返回值HttpResult可替换成自己想要的类型.
public static <T> HttpResult<String> post(final String urlStr, final Map<String, String> params, T body) { String BOUNDARY = UUID.randomUUID().toString(); //边界标识 随机生成 String PREFIX = "--", LINE_END = "\r\n"; HttpResult<String> result = new HttpResult<>(); File file = (File) body; HttpURLConnection conn = null; try { URL url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(30 * 1000); conn.setConnectTimeout(30 * 1000); conn.setDoInput(true); //允许输入流 conn.setDoOutput(true); //允许输出流 conn.setUseCaches(false); //不允许使用缓存 conn.setRequestMethod("POST"); //请求方式 conn.setRequestProperty("Charset", CHARSET); //设置编码 conn.setRequestProperty("connection", "keep-alive"); conn.setRequestProperty("Content-Type", "multipart/form-data" + ";boundary=" + BOUNDARY); headers.remove("token"); OutputStream out = conn.getOutputStream(); StringBuffer sb = new StringBuffer(); for (Map.Entry<String, String> entry : params.entrySet()) { sb.append(PREFIX).append(BOUNDARY).append(LINE_END) .append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINE_END) .append("Content-Type: text/plain; charset=" + CHARSET + LINE_END) .append("Content-Transfer-Encoding: 8bit" + LINE_END) .append(LINE_END).append(entry.getValue()).append(LINE_END); } sb.append(PREFIX).append(BOUNDARY).append(LINE_END) .append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"" + LINE_END) .append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END) .append(LINE_END); out.write(sb.toString().getBytes(CHARSET)); InputStream is = new FileInputStream(file); byte[] bytes = new byte[1024]; int len; while ((len = is.read(bytes)) != -1) { out.write(bytes, 0, len); } out.write(LINE_END.getBytes()); out.write((PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes()); out.flush(); is.close(); out.close(); int resCode = result.code = conn.getResponseCode(); // 开始发送数据 if (resCode == RES_CODE_SUCCESS) { result.obj = buildString(conn.getInputStream()); } } catch (IOException e) { e.printStackTrace(); result.e = e; } finally { if (conn != null) { conn.disconnect(); } } return result; }
来源:CSDN
作者:_纳尼_
链接:https://blog.csdn.net/cy379958495/article/details/78131101