.net mvc 微信开发笔记(六)------上传文件,自定义菜单事件推送
来源:互联网 发布:windows 10 redstone 3 编辑:程序博客网 时间:2024/06/06 13:19
疯了,不知道是CSDN抽风还是我忘了保存,昨晚写的博今天竟然没了。。看来又要重码一遍。。
微信可以回复视频给用户,也可以给用户广播图文消息,而对应的图片、视频、语音等都需要用户提前上传到微信服务器。上传成功后,微信会返回给开发者一个Media_id,可以通过media_id来调用该文件。
http请求方式: POST/FORM http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
然我们看一下该接口所需要的参数:
上传的思路大致有了,首先建一个数据包,再把文件转化为流加入数据包,同时头文件在加入content-type等信息
最后再将数据包post到对应的url就好了。
来个控制器方法:
public string Upload() { string filename = System.Web.HttpContext.Current.Server.MapPath("/Images/carrot1.jpg"); string url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=" + finalstr.acctoken + "&type=image"; // 上传一张图片,放在网站根目录images/carrot1.jpg下。 return HttpHelper.HttpUploadFile(url, filename); }额。。为了方便理解,把上传的主要代码封装到了httphelper类中。。
下边上类中的代码
首先,需要参数content-type,那我们要写个方法来获取文件格式:
private static string GetContentType(FileInfo fileInfo) { var contentType = ""; switch (fileInfo.Extension.ToLower()) { case ".jpg": contentType = "image/jpeg"; break; case ".mp3": contentType = "audio/mp3"; break; case ".amr": contentType = "audio/amr"; break; case ".mp4": contentType = "video/mp4"; break; default: throw new NotSupportedException("文件格式不支持"); } return contentType; }获取文件类型后,就是一个封装数据包并发送的过程了
public static string HttpUploadFile(string url, string file) { //判断文件是否存在 if (!File.Exists(file)) { throw new FileNotFoundException(); } FileInfo fileInfo = new FileInfo(file); string result = string.Empty; string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); //创建连接 var request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "multipart/form-data; boundary=" + boundary; request.Method = "POST"; request.KeepAlive = true; //构造数据包头文件的前半部分 var stream = request.GetRequestStream(); stream.Write(boundarybytes, 0, boundarybytes.Length); var headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n"; var header = string.Format(headerTemplate, fileInfo.Name, file, GetContentType(fileInfo)); var headerbytes = System.Text.Encoding.UTF8.GetBytes(header); stream.Write(headerbytes, 0, headerbytes.Length); var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read); var buffer = new byte[4096]; var bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) { stream.Write(buffer, 0, bytesRead);//文件写入流 } fileStream.Close(); //构造数据包后半部分 var trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); stream.Write(trailer, 0, trailer.Length); stream.Close(); WebResponse wresp = null; try { wresp = request.GetResponse(); Stream stream2 = wresp.GetResponseStream(); StreamReader reader2 = new StreamReader(stream2); result = reader2.ReadToEnd(); } finally { if (wresp != null) { wresp.Close(); wresp = null; } } return result; }OK,如果你按照上边的过程操作,不出意外,会返回
{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}说明上传成功并得到对应的media_id
当用户点击自定义菜单时候,微信会给开发者发送一个event事件
服务器接收之后,我们就可以给用户回复图片或者图文了
如何回复,参见:
.net mvc 微信开发笔记(四)------STREAM,POST/GET,XML解析,获取用户普通消息
0 0
- .net mvc 微信开发笔记(六)------上传文件,自定义菜单事件推送
- .net mvc 微信开发笔记(六)------上传文件,菜单事件推送和响应
- .net mvc 微信开发笔记(五)------JSON解析,自定义菜单
- .net MVC 微信公众号 点击菜单拉取消息时的事件推送
- .net mvc 微信公众号 自定义菜单
- Java微信二次开发之14-自定义菜单及菜单响应事件的推送
- .net 开发微信公众平台(五)-----自定义菜单
- .NET微信公众号开发之创建自定义菜单
- 微信开发 -- 自定义菜单
- 微信开发-自定义菜单
- 微信开发--自定义菜单
- 微信自定义菜单开发
- 微信开发自定义菜单
- java微信公众号开发,认证,自定义菜单,消息推送,网页跳转
- 微信开发之接收事件推送
- 微信开发接收事件推送
- 微信开发之接收事件推送
- 微信开发之接收事件推送
- hdu 2544最短路
- event0设备节点在/dev/input目录下
- 英语面试中老板最爱问的五个问题
- 为duilib的MenuDemo增加消息响应,优化代码和显示效果
- Linux下设置免密码登录
- .net mvc 微信开发笔记(六)------上传文件,自定义菜单事件推送
- How to use epoll? A complete example in C
- HDU 1024:Max Sum Plus Plus
- 美国人日常生活中常用的五星级句子
- cocos2dx3.1.1 code ide LUA项目调用C++
- 终身会员卡上线三重大优惠!
- 手动建立makefile简单实例解析(转载)
- 天线的特性
- 与工作、薪酬有关的词汇