|
|
@@ -1,15 +1,21 @@
|
|
|
package com.pine.common.utils;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+
|
|
|
+import javax.activation.MimetypesFileTypeMap;
|
|
|
import java.io.*;
|
|
|
import java.net.HttpURLConnection;
|
|
|
import java.net.URL;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.Calendar;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Iterator;
|
|
|
import java.util.Map;
|
|
|
|
|
|
public class PostUtil {
|
|
|
|
|
|
- public static String httpPost(String urlStr, Map<String, String> params) {
|
|
|
+ public static String httpPost(String urlStr, Map<String, String> params, String contentType) {
|
|
|
URL connect;
|
|
|
StringBuffer data = new StringBuffer();
|
|
|
try {
|
|
|
@@ -18,14 +24,73 @@ public class PostUtil {
|
|
|
connection.setRequestMethod("POST");
|
|
|
connection.setDoOutput(true);
|
|
|
connection.setDoInput(true);
|
|
|
- connection.setUseCaches(false);//post不能使用缓存
|
|
|
+ //post不能使用缓存
|
|
|
+ connection.setUseCaches(false);
|
|
|
connection.setInstanceFollowRedirects(true);
|
|
|
connection.setRequestProperty("accept", "*/*");
|
|
|
connection.setRequestProperty("connection", "Keep-Alive");
|
|
|
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
|
|
|
+ if (!StringUtils.isEmpty(contentType)) {
|
|
|
+ connection.setRequestProperty("content-Type", contentType);
|
|
|
+ }
|
|
|
+
|
|
|
OutputStreamWriter paramout = new OutputStreamWriter(
|
|
|
connection.getOutputStream(), "UTF-8");
|
|
|
- String paramsStr = ""; //拼接Post 请求的参数
|
|
|
+
|
|
|
+ if (!StringUtils.isEmpty(contentType)) {
|
|
|
+ paramout.write(JSONObject.toJSONString(params));
|
|
|
+ } else {
|
|
|
+ //拼接Post 请求的参数
|
|
|
+ String paramsStr = "";
|
|
|
+ for (String param : params.keySet()) {
|
|
|
+ paramsStr += "&" + param + "=" + params.get(param);
|
|
|
+ }
|
|
|
+ if (!paramsStr.isEmpty()) {
|
|
|
+ paramsStr = paramsStr.substring(1);
|
|
|
+ }
|
|
|
+ paramout.write(paramsStr);
|
|
|
+
|
|
|
+ }
|
|
|
+ paramout.flush();
|
|
|
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
|
|
|
+ connection.getInputStream(), "UTF-8"));
|
|
|
+ String line;
|
|
|
+ while ((line = reader.readLine()) != null) {
|
|
|
+ data.append(line);
|
|
|
+ }
|
|
|
+
|
|
|
+ paramout.close();
|
|
|
+ reader.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return data.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String httpPostFromData(String urlStr, Map<String, String> params) {
|
|
|
+ URL connect;
|
|
|
+ StringBuffer data = new StringBuffer();
|
|
|
+ try {
|
|
|
+ connect = new URL(urlStr);
|
|
|
+ HttpURLConnection connection = (HttpURLConnection) connect.openConnection();
|
|
|
+ connection.setRequestMethod("POST");
|
|
|
+ connection.setDoOutput(true);
|
|
|
+ connection.setDoInput(true);
|
|
|
+ //post不能使用缓存
|
|
|
+ connection.setUseCaches(false);
|
|
|
+ connection.setInstanceFollowRedirects(true);
|
|
|
+ connection.setRequestProperty("accept", "*/*");
|
|
|
+ connection.setRequestProperty("connection", "Keep-Alive");
|
|
|
+ connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
|
|
|
+ connection.setRequestProperty("content-Type", "multipart/form-data;boundary=--------------------------573238423125646947779452");
|
|
|
+
|
|
|
+
|
|
|
+ OutputStreamWriter paramout = new OutputStreamWriter(
|
|
|
+ connection.getOutputStream(), "UTF-8");
|
|
|
+
|
|
|
+ //拼接Post 请求的参数
|
|
|
+ String paramsStr = "";
|
|
|
for (String param : params.keySet()) {
|
|
|
paramsStr += "&" + param + "=" + params.get(param);
|
|
|
}
|
|
|
@@ -33,6 +98,7 @@ public class PostUtil {
|
|
|
paramsStr = paramsStr.substring(1);
|
|
|
}
|
|
|
paramout.write(paramsStr);
|
|
|
+
|
|
|
paramout.flush();
|
|
|
BufferedReader reader = new BufferedReader(new InputStreamReader(
|
|
|
connection.getInputStream(), "UTF-8"));
|
|
|
@@ -113,4 +179,150 @@ public class PostUtil {
|
|
|
httpURLConnection.disconnect();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ testUploadImage();
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 测试上传图片
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public static void testUploadImage(){
|
|
|
+ String url = "http://47.100.17.208:8280/api/auth/sys-user/getShopRoleByAccountAndPassword";
|
|
|
+// String fileName = "e:/username/textures/antimap_0017.png";
|
|
|
+ Map<String, String> textMap = new HashMap<String, String>();
|
|
|
+ //可以设置多个input的name,value
|
|
|
+ textMap.put("account", "xxs2");
|
|
|
+ textMap.put("password", "4QrcOUm6Wau+VuBX8g+IPg==");
|
|
|
+ //设置file的name,路径
|
|
|
+// Map<String, String> fileMap = new HashMap<String, String>();
|
|
|
+// fileMap.put("upfile", fileName);
|
|
|
+ String contentType = "";//image/png
|
|
|
+ String ret = formUpload(url, textMap, null,contentType);
|
|
|
+ System.out.println(ret);
|
|
|
+ //{"status":"0","message":"add succeed","baking_url":"group1\/M00\/00\/A8\/CgACJ1Zo-LuAN207AAQA3nlGY5k151.png"}
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上传图片
|
|
|
+ * @param urlStr
|
|
|
+ * @param textMap
|
|
|
+ * @param fileMap
|
|
|
+ * @param contentType 没有传入文件类型默认采用application/octet-stream
|
|
|
+ * contentType非空采用filename匹配默认的图片类型
|
|
|
+ * @return 返回response数据
|
|
|
+ */
|
|
|
+ @SuppressWarnings("rawtypes")
|
|
|
+ public static String formUpload(String urlStr, Map<String, String> textMap,
|
|
|
+ Map<String, String> fileMap,String contentType) {
|
|
|
+ String res = "";
|
|
|
+ HttpURLConnection conn = null;
|
|
|
+ // boundary就是request头和上传文件内容的分隔符
|
|
|
+ String BOUNDARY = "---------------------------123821742118716";
|
|
|
+ try {
|
|
|
+ URL url = new URL(urlStr);
|
|
|
+ conn = (HttpURLConnection) url.openConnection();
|
|
|
+ conn.setConnectTimeout(5000);
|
|
|
+ conn.setReadTimeout(30000);
|
|
|
+ conn.setDoOutput(true);
|
|
|
+ conn.setDoInput(true);
|
|
|
+ conn.setUseCaches(false);
|
|
|
+ conn.setRequestMethod("POST");
|
|
|
+ conn.setRequestProperty("Connection", "Keep-Alive");
|
|
|
+ // conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
|
|
|
+ conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY);
|
|
|
+ OutputStream out = new DataOutputStream(conn.getOutputStream());
|
|
|
+ // text
|
|
|
+ if (textMap != null) {
|
|
|
+ StringBuffer strBuf = new StringBuffer();
|
|
|
+ Iterator iter = textMap.entrySet().iterator();
|
|
|
+ while (iter.hasNext()) {
|
|
|
+ Map.Entry entry = (Map.Entry) iter.next();
|
|
|
+ String inputName = (String) entry.getKey();
|
|
|
+ String inputValue = (String) entry.getValue();
|
|
|
+ if (inputValue == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
|
|
|
+ strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n");
|
|
|
+ strBuf.append(inputValue);
|
|
|
+ }
|
|
|
+ out.write(strBuf.toString().getBytes());
|
|
|
+ }
|
|
|
+ // file
|
|
|
+ if (fileMap != null) {
|
|
|
+ Iterator iter = fileMap.entrySet().iterator();
|
|
|
+ while (iter.hasNext()) {
|
|
|
+ Map.Entry entry = (Map.Entry) iter.next();
|
|
|
+ String inputName = (String) entry.getKey();
|
|
|
+ String inputValue = (String) entry.getValue();
|
|
|
+ if (inputValue == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ File file = new File(inputValue);
|
|
|
+ String filename = file.getName();
|
|
|
+
|
|
|
+ //没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream
|
|
|
+ contentType = new MimetypesFileTypeMap().getContentType(file);
|
|
|
+ //contentType非空采用filename匹配默认的图片类型
|
|
|
+ if(!"".equals(contentType)){
|
|
|
+ if (filename.endsWith(".png")) {
|
|
|
+ contentType = "image/png";
|
|
|
+ }else if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".jpe")) {
|
|
|
+ contentType = "image/jpeg";
|
|
|
+ }else if (filename.endsWith(".gif")) {
|
|
|
+ contentType = "image/gif";
|
|
|
+ }else if (filename.endsWith(".ico")) {
|
|
|
+ contentType = "image/image/x-icon";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (contentType == null || "".equals(contentType)) {
|
|
|
+ contentType = "application/octet-stream";
|
|
|
+ }
|
|
|
+ StringBuffer strBuf = new StringBuffer();
|
|
|
+ strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
|
|
|
+ strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + filename + "\"\r\n");
|
|
|
+ strBuf.append("Content-Type:" + contentType + "\r\n\r\n");
|
|
|
+ out.write(strBuf.toString().getBytes());
|
|
|
+ DataInputStream in = new DataInputStream(new FileInputStream(file));
|
|
|
+ int bytes = 0;
|
|
|
+ byte[] bufferOut = new byte[1024];
|
|
|
+ while ((bytes = in.read(bufferOut)) != -1) {
|
|
|
+ out.write(bufferOut, 0, bytes);
|
|
|
+ }
|
|
|
+ in.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
|
|
|
+ out.write(endData);
|
|
|
+ out.flush();
|
|
|
+ out.close();
|
|
|
+ // 读取返回数据
|
|
|
+ StringBuffer strBuf = new StringBuffer();
|
|
|
+ BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
|
|
+ String line = null;
|
|
|
+ while ((line = reader.readLine()) != null) {
|
|
|
+ strBuf.append(line).append("\n");
|
|
|
+ }
|
|
|
+ res = strBuf.toString();
|
|
|
+ reader.close();
|
|
|
+ reader = null;
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("发送POST请求出错。" + urlStr);
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ if (conn != null) {
|
|
|
+ conn.disconnect();
|
|
|
+ conn = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return res;
|
|
|
+ }
|
|
|
}
|