public class WXCloudClient {
/**
http请求方式:POST/FORM,使用https https://api.weixin.qq.com/cgi-bin/media/upload?
* access_token=ACCESS_TOKEN&type=TYPE
* 调用示例(使用curl命令,用FORM表单方式上传一个多媒体文件):
* curl -F media=@test.jpg
* “https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE”
* */
public JSONObject getMediaId(String mediaIdUrl, String token, File file)throws Exception{
StringBuilder sb = new StringBuilder(mediaIdUrl);
String url = sb.append("?").append("access_token=").append(token)
.append("&").append("type=").append("image").toString();
java.net.URL urlObj = new URL(url);
// 创建Http连接
HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false); // 使用post提交需要设置忽略缓存
//消息请求头信息
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", "UTF-8");
//设置边界
String BOUNDARY = "----------" + System.currentTimeMillis();
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + BOUNDARY);
StringBuilder builder = new StringBuilder();
builder.append("--"); // 必须多两道线
builder.append(BOUNDARY);
builder.append("\r\n");
builder.append("Content-Disposition:form-data;name=\"media\";filename=\"" + file.getName() + "\";filelength=\"" + file.length() + "\"\r\n");
builder.append("Content-Type:application/octet-stream\r\n\r\n");
byte[] head = builder.toString().getBytes("utf-8");
// 创建输出流
OutputStream out = new DataOutputStream(conn.getOutputStream());
// 获得输出流表头
out.write(head);
//文件正文部分
DataInputStream in = new DataInputStream(new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024 * 1024 * 10]; // 10M
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
in.close();
//结尾
byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");
out.write(foot);
out.flush();
out.close();
// 获取响应
StringBuffer buffer = new StringBuffer();
BufferedReader reader = null;
String result = null;
try {
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
if (result == null) {
result = buffer.toString();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
reader.close();
}
JSONObject json = JSONObject.parseObject(result);
BaseLog.getErrorLog().info("返回的结果getMediaId:{}",json);
return json;
}
}