您的位置:首页 > 移动开发 > 微信开发

java实现微信获取/下载临时素材

2016-12-20 15:47 2983 查看
摘要: 由于微信二次开发需要保持用户发送的消息到自己公司的服务器,如视频、语音等媒体文件,需要调用微信获取临时素材接口才能获取到媒体文件

//定义两个成员变量常量
//获取临时素材(视频不能使用https协议)
public static final String GET_TMP_MATERIAL = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=%s&media_id=%s";
//获取临时素材(视频)
public static final String GET_TMP_MATERIAL_VIDEO = "http://api.weixin.qq.com/cgi-bin/media/get?access_token=%s&media_id=%s";

//获取微信服务器中生成的媒体文件

//由于视频使用的是http协议,而图片、语音使用http协议,故此处需要传递media_id和type

protected static File fetchTmpFile(String media_id, String type){
try {
String token = AccessTokenApi.getAccessToken().getAccessToken();
String url = null;
//视频是http协议
if("video".equalsIgnoreCase(type)){
url = String.format(GET_TMP_MATERIAL_VIDEO, token, media_id);
}else{
url = String.format(GET_TMP_MATERIAL, token, media_id);;
}
URL u = new URL(url);
HttpURLConnection  conn = (HttpURLConnection) u.openConnection();
conn.setRequestMethod("POST");
conn.connect();
BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
String content_disposition = conn.getHeaderField("content-disposition");
//微信服务器生成的文件名称
String file_name ="";
String[] content_arr = content_disposition.split(";");
if(content_arr.length  == 2){
String tmp = content_arr[1];
int index = tmp.indexOf("\"");
file_name =tmp.substring(index+1, tmp.length()-1);
}
//生成不同文件名称
File file = new File(file_name);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
byte[] buf = new byte[2048];
int length = bis.read(buf);
while(length != -1){
bos.write(buf, 0, length);
length = bis.read(buf);
}
bos.close();
bis.close();
return file;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息