Java微信公众号开发素材管理之新增临时素材
2018-02-05 21:06
169 查看
一、官方文档
公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和服务号开放。通过本接口,公众号可以新增临时素材(即上传临时多媒体文件)。
注意点:
临时素材media_id是可复用的。
媒体文件在微信后台保存时间为3天,即3天后media_id失效。
上传临时素材的格式、大小限制与公众平台官网一致。
图片(image): 2M,支持PNG\JPEG\JPG\GIF格式
语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式
视频(video):10MB,支持MP4格式
缩略图(thumb):64KB,支持JPG格式
需使用https调用本接口。
接口调用请求说明:
参数说明:
返回说明
4000
:
正确情况下的返回JSON数据包结果如下:
以上是官方的说明:总结一下就是:通过http请求方式POST/FORM,用FORM表单方式上传一个多媒体文件。
二、RFC1867协议
先了解一下:Multipart/form-data POST文件上传详解
RFC1867协议主要是在HTTP协议的基础上为INPUT标签增加了file属性,同时限定了Form的method必须为POST,ENCTYPE必须为multipart/form-data。
官方文档中是使用curl命令来实现上传,通过RFC1867协议,Java使用HttpURLConnection类也可以实现上传的目的:
返回JSON:
公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和服务号开放。通过本接口,公众号可以新增临时素材(即上传临时多媒体文件)。
注意点:
临时素材media_id是可复用的。
媒体文件在微信后台保存时间为3天,即3天后media_id失效。
上传临时素材的格式、大小限制与公众平台官网一致。
图片(image): 2M,支持PNG\JPEG\JPG\GIF格式
语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式
视频(video):10MB,支持MP4格式
缩略图(thumb):64KB,支持JPG格式
需使用https调用本接口。
接口调用请求说明:
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"
参数说明:
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
type | 是 | 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb) |
media | 是 | form-data中媒体文件标识,有filename、filelength、content-type等信息 |
4000
:
正确情况下的返回JSON数据包结果如下:
{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}
参数 | 描述 |
---|---|
type | 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb,主要用于视频与音乐格式的缩略图) |
media_id | 媒体文件上传后,获取标识 |
created_at | 媒体文件上传时间戳 |
二、RFC1867协议
先了解一下:Multipart/form-data POST文件上传详解
RFC1867协议主要是在HTTP协议的基础上为INPUT标签增加了file属性,同时限定了Form的method必须为POST,ENCTYPE必须为multipart/form-data。
官方文档中是使用curl命令来实现上传,通过RFC1867协议,Java使用HttpURLConnection类也可以实现上传的目的:
public static JSONObject UploadMeida(String fileType,String filePath) throws Exception{ //返回结果 String result=null; File file=new File(filePath); if(!file.exists()||!file.isFile()){ throw new IOException("文件不存在"); } String token=WechatUtil.getToken(); String urlString="https://api.weixin.qq.com/cgi-bin/media/upload?access_token="+token+"&type="+fileType; URL url=new URL(urlString); HttpsURLConnection conn=(HttpsURLConnection) url.openConnection(); conn.setRequestMethod("POST");//以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 sb=new StringBuilder(); sb.append("--");//必须多两条道 sb.append(BOUNDARY); sb.append("\r\n"); sb.append("Content-Disposition: form-data;name=\"media\"; filename=\"" + file.getName()+"\"\r\n"); sb.append("Content-Type:application/octet-stream\r\n\r\n"); System.out.println("sb:"+sb); //获得输出流 OutputStream out=new DataOutputStream(conn.getOutputStream()); //输出表头 out.write(sb.toString().getBytes("UTF-8")); //文件正文部分 //把文件以流的方式 推送道URL中 DataInputStream din=new DataInputStream(new FileInputStream(file)); int bytes=0; byte[] buffer=new byte[1024]; while((bytes=din.read(buffer))!=-1){ out.write(buffer,0,bytes); } din.close(); //结尾部分 byte[] foot=("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");//定义数据最后分割线 out.write(foot); out.flush(); out.close(); if(HttpsURLConnection.HTTP_OK==conn.getResponseCode()){ StringBuffer strbuffer=null; BufferedReader reader=null; try { strbuffer=new StringBuffer(); reader=new BufferedReader(new InputStreamReader(conn.getInputStream())); String lineString=null; while((lineString=reader.readLine())!=null){ strbuffer.append(lineString); } if(result==null){ result=strbuffer.toString(); System.out.println("result:"+result); } } catch (IOException e) { System.out.println("发送POST请求出现异常!"+e); e.printStackTrace(); }finally{ if(reader!=null){ reader.close(); } } } JSONObject jsonObject=JSONObject.fromObject(result); return jsonObject; }
返回JSON:
{"type":"image","media_id":"6Urmwvz3WuLp_-XmFo8GMtE2QKan0vQ3zVCyJQoL-BSi0UBFWlcGT68ipP1AtH-h","created_at":1517834980}
相关文章推荐
- JAVA微信公众号开发——上传图片,新增永久素材,群发
- 微信公众号接口开发:新增临时素材{"errcode":41005,"errmsg":"media data missing"}
- Java企业微信开发_06_素材管理之上传本地临时素材文件至微信服务器
- php 微信开发之新增上传/获取下载临时素材
- 微信公众平台开发【素材管理】上传临时素材
- 微信公众平台开发【素材管理】获取临时素材
- 微信公众平台开发【素材管理】获取临时素材
- 公众号上传视频语音素材,公众平台临时素材开发,微信开发素材管理7
- php上传公众号临时素材-微信开发素材管理6
- 微信公众平台开发【素材管理】上传临时素材
- Java企业微信开发_08_素材管理之下载微信临时素材到本地服务器
- 微信开发【素材管理】上传临时素材
- 微信公众平台开发【素材管理】上传临时素材
- 微信公众平台开发【素材管理】上传临时素材
- 公众号后台开发,管理临时素材功能
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增查询引擎管理
- 微信素材管理之新增、删除和获取永久素材
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-WinForm部分
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->用户管理模块新增“重置用户密码”功能
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本模块管理界面新增模块排序功能