java 连接服务器,以multipart/form-data形式。上传文件或图片参数
注意:在拼接格式的时候一定要注意空格 ,要不容易出错。
package com.aem.sheep.util;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.activation.MimetypesFileTypeMap;
import org.springframework.stereotype.Component;
@Component
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// 服务器或第三方接口地址
String urlStr = "http://192.168.1.1:80/param/form";
String res = "";
HttpURLConnection conn = null;
// PrintWriter out = null;
// boundary就是request头和上传文件内容的分隔符
String BOUNDARY = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
try {
StringBuffer strBuf = new StringBuffer();
String str = "";
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + BOUNDARY);
conn.setRequestProperty("Accept", "*/*");
conn.setRequestProperty("Cache-Control", "no-cache");
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("cache-control", "no-cache");
conn.setRequestProperty("Charsert", "UTF-8");
conn.setDoOutput(true);
conn.setDoInput(true);
OutputStream out = new DataOutputStream(conn.getOutputStream());
// text
str += "\r\n" + "--" + BOUNDARY + "\r\n"
+ "Content-Disposition: form-data; name=\"" + "param_id"
+ "\"" + "\r\n\r\n";
str += "1011";
// CacheUtil.REALPATH 指服务器的路径
// 上传文件或图片地址
String filePath = CacheUtil.REALPATH + "img\\" + "123" + ".jpg";
File file = new File(filePath);
String filename = file.getName();
// 没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream
String 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();
str += "\r\n" + "--" + BOUNDARY + "\r\n"
+ "Content-Disposition: form-data; name=\"" + "img"
+ "\"; filename=\"" + filename + "\"\r\n";
str += "Content-Type: " + contentType + "\r\n\r\n";
System.out.println("发送:" + str);
out.write(str.getBytes("utf-8"));
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();
str += "\r\n--" + BOUNDARY + "--\r\n";
out.write(str.getBytes("utf-8"));//以utf8编码形式发送
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();
System.out.println("返回信息:" + res);
reader.close();
reader = null;
} catch (Exception e) {
System.out.println("发送POST请求出错。" + urlStr);
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
conn = null;
}
}
}
}