微信开发 ---- 素材管理

2018.03.15GitHub下载代码 

官网: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; //返回结果
                }
            }
        }
View Code

③创建我们的控制器

 

需要两个方法,一个显示上传文件的,一个是接收的。

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; }


    }
View Code

 

 

 ⑦获取素材总数

 

 

⑧获取素材列表     有的类型返回的json格式会不一样,具体看官网

 

 

 

 ⑨删除素材

 

 

总结:只有当我们需要新加  临时/永久   素材的时候,我们才需要运行  改网站进行长传,其他的功能可以写在别的控制器中做演示。

 

posted @ 2018-03-13 17:34  Sealee  阅读(550)  评论(0编辑  收藏  举报