NET实现微信公共平台上传下载多媒体文件(转)

简介:

 举个例子,有人对着我们的公共微信号拍个照片发送过来,然后我们处理这个照片,比如进行ocr识别字(随后就会降到这个例子),或者人脸识别,或者拍照取证等,这些功能都是相当有用的。那么我们现在就要分析一下这个过程。微信平台肯定不能帮助我们OCR或者人脸识别等功能,要做这些功能首先到得到图片!用户拍摄的照片首先被上传到了wenxin的服务器,然后就有了一个mediaID,我们用这个mediaID可以下载到我们自己的服务器上然后处理,把结果给微信平台,由微信平台最终反馈给用户(关注者)。微信的开发文档已经给出了下载资源的办法,我改造为.net的,如下:

复制代码
/// <SUMMARY> 
    /// 下载保存多媒体文件,返回多媒体保存路径 
    /// </SUMMARY> 
    /// <PARAM name="ACCESS_TOKEN"></PARAM> 
    /// <PARAM name="MEDIA_ID"></PARAM> 
    /// <RETURNS></RETURNS> 
    public string GetMultimedia(string ACCESS_TOKEN, string MEDIA_ID) 
    { 
        string file = string.Empty; 
        string content = string.Empty; 
        string strpath = string.Empty; 
        string savepath = string.Empty; 
        string stUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=" + ACCESS_TOKEN + "&media_id=" + MEDIA_ID; 
  
        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(stUrl); 
  
        req.Method = "GET"; 
        using (WebResponse wr = req.GetResponse()) 
        { 
            HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse(); 
  
            strpath = myResponse.ResponseUri.ToString(); 
            WriteLog("接收类别://" + myResponse.ContentType); 
            WebClient mywebclient = new WebClient(); 
            savepath = Server.MapPath("image") + "\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next().ToString().Substring(0, 4) + ".jpg"; 
            WriteLog("路径://" + savepath); 
            try
            { 
                mywebclient.DownloadFile(strpath, savepath); 
                file = savepath; 
            } 
            catch (Exception ex) 
            { 
                savepath = ex.ToString(); 
            } 
  
        } 
        return file; 
    }
复制代码

上面的两个参数很好理解,第一就是ACCESS_TOKEN,之前说过很多了,第二就是在微信服务器上的资源id,即mediaID。如果我们要下载微信服务器上的资源总要知道id吧。但是MEDIA_ID又是怎么产生的呢?我首先改造一下之前的消息实体类,加入MediaId 属性

复制代码
class wxmessage   
  {   
      public string FromUserName { get; set; }   
      public string ToUserName { get; set; }   
       public string MsgType { get; set; }   
       public string EventName { get; set; }   
       public string Content { get; set; } 
       public string Recognition { get; set; } 
       public string MediaId { get; set; } 
       public string EventKey { get; set; }  
   }
复制代码

然后改造一下GetWxMessage(),给MediaId赋值

复制代码
private wxmessage GetWxMessage() 
     { 
         wxmessage wx = new wxmessage(); 
         StreamReader str = new StreamReader(Request.InputStream, System.Text.Encoding.UTF8); 
         XmlDocument xml = new XmlDocument(); 
         xml.Load(str); 
         wx.ToUserName = xml.SelectSingleNode("xml").SelectSingleNode("ToUserName").InnerText; 
         wx.FromUserName = xml.SelectSingleNode("xml").SelectSingleNode("FromUserName").InnerText; 
         wx.MsgType = xml.SelectSingleNode("xml").SelectSingleNode("MsgType").InnerText; 
         if (wx.MsgType.Trim() == "text") 
         { 
             wx.Content = xml.SelectSingleNode("xml").SelectSingleNode("Content").InnerText; 
         } 
         if (wx.MsgType.Trim() == "event") 
         { 
             wx.EventName = xml.SelectSingleNode("xml").SelectSingleNode("Event").InnerText; 
             wx.EventKey = xml.SelectSingleNode("xml").SelectSingleNode("EventKey").InnerText; 
         } 
         if (wx.MsgType.Trim() == "voice") 
         { 
             wx.Recognition = xml.SelectSingleNode("xml").SelectSingleNode("Recognition").InnerText; 
         } 
        if (wx.MsgType.Trim() == "image") 
        { 
            wx.MediaId = xml.SelectSingleNode("xml").SelectSingleNode("MediaId").InnerText; 
        } 
           
         return wx; 
     }
复制代码

如果我们在修改一下消息接受的代码,就可以做到,客户发一个照片给微信平台,程序检测到时图片,然后根据MediaId,调用GetMultimedia方法把图片下载到自己的服务器上。后面的工作嘛,你就想干什么干什么了。
刚才的例子好像是用户(关注者),发图片,然后通过微信平台到我们的服务器中,还有一种情况,用户发一个用户名:例如“hemeng”,然后我需要调用已经存在服务器中的hemeng头像的图片反馈给用户,这怎么办呢?如何把我们的图片传给微信平台,然后传给用户呢?我们就用到了上传得方法:

复制代码
/// <SUMMARY> 
    /// 上传多媒体文件,返回 MediaId 
    /// </SUMMARY> 
    /// <PARAM name="ACCESS_TOKEN"></PARAM> 
    /// <PARAM name="Type"></PARAM> 
    /// <RETURNS></RETURNS> 
    public string UploadMultimedia(string ACCESS_TOKEN, string Type) 
    { 
        string result = ""; 
        string wxurl = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=" + ACCESS_TOKEN + "&type=" + Type; 
        string filepath = Server.MapPath("image") + "\\hemeng80.jpg";(本地服务器的地址) 
        WriteLog("上传路径:" + filepath); 
        WebClient myWebClient = new WebClient(); 
        myWebClient.Credentials = CredentialCache.DefaultCredentials; 
        try
        { 
            byte[] responseArray = myWebClient.UploadFile(wxurl, "POST", filepath); 
            result = System.Text.Encoding.Default.GetString(responseArray, 0, responseArray.Length); 
            WriteLog("上传result:" + result); 
            UploadMM _mode = JsonHelper.ParseFromJson<UPLOADMM>(result); 
            result = _mode.media_id; 
        } 
        catch (Exception ex) 
        { 
            result = "Error:" + ex.Message; 
        } 
        WriteLog("上传MediaId:" + result); 
        return result; 
    }
复制代码

第二个参数如果是图片"image",可以参照微信的文档。函数的返回值就是一个MediaId,这样你就可以利用发送图片的函数,发给客户了,发送图片的函数如下:

复制代码
protected string sendPicTextMessage(Msg _mode, string MediaId) 
    { 
        string res = string.Format(@"<xml>
                                            <ToUserName><![CDATA[{0}]]></ToUserName>
                                            <FromUserName><![CDATA[{1}]]></FromUserName>
                                            <CreateTime>{2}</CreateTime>
                                            <MsgType><![CDATA[image]]></MsgType>
                                            <Image>
                                            <MediaId><![CDATA[{3}]]></MediaId>
                                            </Image>
                                   </xml> ", 
           _mode.FromUserName, _mode.ToUserName, DateTime.Now, MediaId); 
  
        return res; 
    }
复制代码

其他视频,语音的操作也类似,就不再冗余介绍了。有了这些知识我们是不是能做不少应用了?当然是肯定的,但是我们的代码还不够优化,结构也不合理,不着急,我们会逐渐介绍到的,因为我们还没有完全了解完微信的强大功能。

本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/3636234.html如需转载请自行联系原作者


欢醉

相关文章
|
3月前
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
271 3
|
19天前
|
开发框架 安全 .NET
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
.NET Framework是Windows平台的开发框架,包含CLR和FCL,支持多种语言开发桌面、Web应用。常用版本有3.5、4.5.2、4.8.1,系统可同时安装多个版本,确保软件兼容运行。
376 0
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
|
8月前
|
存储 算法 安全
.NET 平台 SM2 国密算法 License 证书生成深度解析
授权证书文件的后缀通常取决于其编码格式和具体用途。本文档通过一个示例程序展示了如何在 .NET 平台上使用国密 SM2 算法生成和验证许可证(License)文件。该示例不仅详细演示了 SM2 国密算法的实际应用场景,还提供了关于如何高效处理大规模许可证文件生成任务的技术参考。通过对不同并发策略的性能测试,开发者可以更好地理解如何优化许可证生成流程,以满足高并发和大数据量的需求。 希望这段描述更清晰地传达了程序的功能和技术亮点。
972 14
.NET 平台 SM2 国密算法 License 证书生成深度解析
|
1月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
2月前
.NET Framework 3.5离线安装包合集下载
本文介绍了如何获取和安装.NET Framework运行库离线合集包。用户可通过提供的链接下载安装包,安装过程简单,按提示逐步操作即可完成。安装时可选择所需版本,工具会自动适配架构,无需手动判断,方便高效。
1114 0
|
4月前
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
174 0
|
7月前
|
存储 移动开发 小程序
校园圈子系统小程序(圈子论坛、私信聊天、资料共享、二手交易、兼职,跑腿)开源码开发/微信公众号、小程序、H5多端账号同步/搭建多城市的综合社交生活平台
基于开源技术栈构建的校园圈子系统小程序,整合社交与生活服务功能,涵盖兴趣圈子、私信聊天、资料共享、二手交易、兼职跑腿等六大核心模块。通过多端账号同步(微信公众号/小程序/H5),实现数据实时交互,满足学生群体的多元化需求。项目精准锚定校园市场,以“社交+服务”双轮驱动,提供一站式解决方案,支持快速部署与多校区运营,同时具备广告、佣金、会员等多元变现能力,是打造校园生态的理想工具。
695 2
校园圈子系统小程序(圈子论坛、私信聊天、资料共享、二手交易、兼职,跑腿)开源码开发/微信公众号、小程序、H5多端账号同步/搭建多城市的综合社交生活平台
|
8月前
|
人工智能 开发框架 机器人
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
4759 38
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
|
6月前
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
7月前
|
小程序 Java 关系型数据库
weixin116大学生就业平台微信小程序+ssm(文档+源码)_kaic
本文介绍了一款大学生就业平台微信小程序的开发过程,涵盖开发环境、系统设计、实现与测试等方面。该小程序基于微信平台特性,采用MYSQL数据库存储数据,确保系统稳定与安全,同时满足学生、企业和管理员不同权限用户的功能需求。通过简化操作流程,实现了招聘信息查看、简历投递等实用功能,旨在为用户提供便捷高效的求职体验,符合“操作简单,功能实用”的设计理念。

热门文章

最新文章