图片,语音,视频,这三种消息构造时的都需要一个mediaId,而这个mediaId是通过素材管理接口上传多媒体文件得到的,通过微信公众号平台提供的素材管理接口将图片,语音,视频上传到微信服务器上,上传成功后,微信服务器会给我们返回一个mediaId,用于标识上传成功的多媒体素材
为了构造图片,语音,视频的这几种回复消息,需要提前准备好素材
例:图片路径:D:\img\1.jpg
package com.qj.util;
/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
*/
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* @program: Weixin->UploadMediaApiUtil
* @description:上传media素材, 获取media_id
* @author: qingjian
* @create: 2019-09-23 21:58
**/
public class UploadMediaApiUtil {
// token 接口(GET)
private static final String ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
// 素材上传(POST)URL
private static final String UPLOAD_MEDIA = "https://api.weixin.qq.com/cgi-bin/media/upload";
// 素材下载:不支持视频文件的下载(GET)
private static final String DOWNLOAD_MEDIA = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=%s&media_id=%s";
public static String getTokenUrl(String appId, String appSecret) {
return String.format(ACCESS_TOKEN, appId, appSecret);
}
public static String getDownloadUrl(String token, String mediaId) {
return String.format(DOWNLOAD_MEDIA, token, mediaId);
}
/**
* 通用接口获取token凭证
* @param appId
* @param appSecret
* @return
*/
public String getAccessToken(String appId, String appSecret) {
NetWorkUtil netHelper = new NetWorkUtil();
String Url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", appId, appSecret);
String result = netHelper.getHttpsResponse(Url, "");
JSONObject json = JSON.parseObject(result);
return json.getString("access_token");
}
/**
* 素材上传到微信服务器
* @param file File file = new File(filePath); // 获取本地文件
* @param token access_token
* @param type type只支持四种类型素材(video/image/voice/thumb)
* @return
*/
public JSONObject uploadMedia(File file, String token, String type) {
if(file == null || token == null || type == null){
return null;
}
if(!file.exists()){
System.out.println("上传文件不存在,请检查!");
return null;
}
JSONObject jsonObject = null;
PostMethod post = new PostMethod(UPLOAD_MEDIA);
post.setRequestHeader("Connection", "Keep-Alive");
post.setRequestHeader("Cache-Control", "no-cache");
FilePart media;
HttpClient httpClient = new HttpClient();
//信任任何类型的证书
Protocol myhttps = new Protocol("https", new SSLProtocolSocketFactory(), 443);
Protocol.registerProtocol("https", myhttps);
try {
media = new FilePart("media", file);
Part[] parts = new Part[]{
new StringPart("access_token", token),
new StringPart("type", type),
media
};
MultipartRequestEntity entity = new MultipartRequestEntity(parts,post.getParams());
post.setRequestEntity(entity);
int status = httpClient.executeMethod(post);
if (status == HttpStatus.SC_OK) {
String text = post.getResponseBodyAsString();
jsonObject = JSONObject.parseObject(text);
} else {
System.out.println("upload Media failure status is:" + status);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return jsonObject;
}
public static File downloadMedia(String fileName, String token, String mediaId) {
String path = getDownloadUrl(token, mediaId);
//return httpRequestToFile(fileName, url, "GET", null);
if (fileName == null || path == null) {
return null;
}
File file = null;
HttpURLConnection conn = null;
InputStream inputStream = null;
FileOutputStream fileOut = null;
try {
URL url = new URL(path);
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("GET");
inputStream = conn.getInputStream();
if (inputStream != null) {
file = new File(fileName);
} else {
return file;
}
//写入到文件
fileOut = new FileOutputStream(file);
if (fileOut != null) {
int c = inputStream.read();
while (c != -1) {
fileOut.write(c);
c = inputStream.read();
}
}
} catch (Exception e) {
} finally {
if (conn != null) {
conn.disconnect();
}
try {
inputStream.close();
fileOut.close();
} catch (IOException execption) {
}
}
return file;
}
}
package com.qj.servlet;
import com.alibaba.fastjson.JSONObject;
import com.qj.util.UploadMediaApiUtil;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
*/
@WebServlet(name = "UploadMediaServlet")
public class UploadMediaServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UploadMediaApiUtil uploadMediaApiUtil = new UploadMediaApiUtil();
String appId = "wx8948d77934e934e0";
String appSecret = "d4babf8b4bc341167b283e21e129e073";
String accessToken = uploadMediaApiUtil.getAccessToken(appId,appSecret);
String filePath = "D:\\img\\1.jpg";
File file = new File(filePath);
String type = "IMAGE";
JSONObject jsonObject = uploadMediaApiUtil.uploadMedia(file,accessToken,type);
System.out.println(jsonObject.toString());
}
}
UploadMediaServlet
com.qj.servlet.UploadMediaServlet
UploadMediaServlet
/UploadMediaServlet