微信开发 ---- 素材管理
2018.03.15:GitHub下载代码
官网:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738726 仔细阅读完我们的文档
做测试的时候经常报错。 有几个需要注意的:
①但凡涉及到Post传值的时候,请拼接好你的字符串
②Post传值的数据一定要是josn格式
步骤:
①创建我们的 API
②新增临时素材 需要表单提交文件来进行新增
HttpRequestPost方法:完成这个方法有很多,可以自己百度一下
/// <summary> /// From表单上传一个多媒体文件 /// </summary> /// <param name="url">地址</param> /// <param name="typeName">类型名称</param> /// <param name="fileName">文件名称</param> /// <param name="fs">输入流</param> /// <param name="encoding">编码</param> /// <returns></returns> public static string HttpRequestPost(string url, string typeName, string fileName, Stream fs, string encoding = "UTF-8") { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //创建url request.Method = "POST"; request.Timeout = 10000; var postStream = new MemoryStream();//创建内存流来进行数据处理 #region 处理Form表单文件上传 //通过表单上传文件 string boundary = "----" + DateTime.Now.Ticks.ToString("x"); //头部 string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n"; try { string formdata = string.Format(formdataTemplate, typeName, fileName); var formdataBytes = Encoding.ASCII.GetBytes(postStream.Length == 0 ? formdata.Substring(2, formdata.Length - 2) : formdata);//第一行不需要换行 postStream.Write(formdataBytes, 0, formdataBytes.Length); //填充内存流 //写入文件 byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead=fs.Read(buffer,0,buffer.Length))!=0) //填充输入流 { postStream.Write(buffer, 0, bytesRead); } } catch (Exception ex) { throw ex; } //结尾 var footer = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); postStream.Write(footer, 0, footer.Length); request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary); #endregion request.ContentLength = postStream != null ? postStream.Length : 0; //设置类容长度 if (postStream!=null) { postStream.Position = 0; //直接写入流 Stream requestStream = request.GetRequestStream(); byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0) { requestStream.Write(buffer, 0, bytesRead); } postStream.Close();//关闭文件访问 } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (Stream responseStream=response.GetResponseStream()) { using (StreamReader myStreamReader = new StreamReader(responseStream, Encoding.GetEncoding(encoding))) { string retString = myStreamReader.ReadToEnd(); return retString; //返回结果 } } }
③创建我们的控制器
需要两个方法,一个显示上传文件的,一个是接收的。
UpFiles视图:
Post里面:
发布项目,打开开发工具
成功了就会显示media_id.
④获取临时素材 media_id可以由上面得到
⑤新增永久素材
⑥上传永久图文素材
WxArtcle类:
/// <summary> /// 回复用户的消息类型 /// </summary> public enum WxArtcleType { News, //图文消息 Text, //文本 Voice, //语音 Image, //图片 Video, //视频 Music, //音乐 } /// <summary> /// 图文消息 /// </summary> public class WxArtcle { /// <summary> /// 图文消息缩略图的media_id,可以在基础支持-上传多媒体文件接口中获得 /// </summary> public string thumb_media_id { set; get; } /// <summary> /// 图文消息的作者 /// </summary> public string author { set; get; } /// <summary> /// 图文消息的标题 /// </summary> public string title { set; get; } /// <summary> /// 在图文消息页面点击“阅读原文”后的页面 /// </summary> public string content_source_url { set; get; } /// <summary> /// 图文消息页面的内容,支持HTML标签 /// </summary> public string content { set; get; } /// <summary> /// 图文消息的描述 /// </summary> public string digest { set; get; } /// <summary> /// 是否显示封面,1为显示,0为不显示 /// </summary> public string show_cover_pic { set; get; } }
⑦获取素材总数
⑧获取素材列表 有的类型返回的json格式会不一样,具体看官网
⑨删除素材
总结:只有当我们需要新加 临时/永久 素材的时候,我们才需要运行 改网站进行长传,其他的功能可以写在别的控制器中做演示。