VIP用户交流群:462197261 收藏本站北冥有鱼 互联网前沿资源第一站 助力全行业互联网+
在线客服:78895949
tonglan
  • 当前位置:
  • 关于微信小程序获取小程序码并接受buffer流保存为图片的方法

    前言

    昨天因为小程序功能要获取小程序程序码,看了微信文档爬了好多坑。(留一下记录以防后面被坑)

    操作

    因为我获取到了微信那里的图片的图片流一直不知道怎么处理,今天总算找到相关文档,解决了。因为数据流不能直接传给前端,只好把buffer流转成图片保存在服务器上,没办法啊~

    废话不多说上代码

        public static string Api_Post(string postUrl, string postData, WebHeaderCollection header = null,bool isPic=false)
         {
          Stream outstream = null;
          Stream instream = null;
          StreamReader sr = null;
          HttpWebResponse response = null;
          HttpWebRequest request = null;
          Encoding encoding = Encoding.UTF8;
          byte[] data = encoding.GetBytes(postData);
          // 准备请求...
          try
          {
            // 设置参数
            request = WebRequest.Create(postUrl) as HttpWebRequest;
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            if (header != null) request.Headers = header;
            request.ContentLength = data.Length;
            outstream = request.GetRequestStream();
            outstream.Write(data, 0, data.Length);
            outstream.Close();
            //发送请求并获取相应回应数据
            response = request.GetResponse() as HttpWebResponse;
            //直到request.GetResponse()程序才开始向目标网页发送Post请求
            instream = response.GetResponseStream();
    
            if (isPic)
            {
              byte[] tt = StreamToBytes(instream);//将数据流转为byte[]
              System.IO.File.WriteAllBytes(HttpContext.Current.Server.MapPath("~/WxCode.jpg"), tt);
              WxQRCodeModel model = new WxQRCodeModel();
              model.data = "192.168.1.216:80/WxCode.jpg";
              model.errcode = 0;
              string content = Config.js.Serialize(model);
              string err = string.Empty;
              return content;
            }
            else
            {
              sr = new StreamReader(instream, encoding);
              //返回结果网页(html)代码
              string content = sr.ReadToEnd();
              string err = string.Empty;
              return content;
            }
    
          }
          catch (Exception ex)
          {
            if (isPic)
            {
              sr = new StreamReader(instream, encoding);
              //返回结果网页(html)代码
              string content = sr.ReadToEnd();
              string err = string.Empty;
              return content;
            }
            else
            {
              string err = ex.Message;
              return string.Empty;
            }
          }
        }

    因为是instream接受到微信接口那里发送过来的数据流,就在instream那里处理,把数据流转换为byte[]数组,然后依靠File的WriteAllBytes方法把转换OK的byte[]数组转换为图片存放在服务器上,然后把图片路径交给model。

        ///将数据流转为byte[]
        public static byte[] StreamToBytes(Stream stream)
        {
          List<byte> bytes = new List<byte>();
          int temp = stream.ReadByte();
          while (temp != -1)
          {
            bytes.Add((byte)temp);
            temp = stream.ReadByte();
          }
          return bytes.ToArray();
        }
    
    

    结尾

    最近才接触到微信小程序开发,emmmm。觉得自己摸鱼摸得好厉害,不过终于把坑爬出来,特别开心。哈哈哈~以后要多多写开发记录。上班期间码得很随意

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对北冥有鱼的支持。

    您可能感兴趣的文章:

    • 微信小程序简单的canvas裁剪图片功能详解
    • 微信小程序如何调用图片接口API并居中显示
    • 微信小程序利用Canvas绘制图片和竖排文字详解
    • 微信小程序上传图片到php服务器的方法
    • 详解微信小程序文件下载--视频和图片
    • 微信小程序实现富文本图片宽度自适应的方法
    • 微信小程序图片左右摆动效果详解

    广而告之:
    热门推荐:
    PHP 数组学习排序全接触第1/2页

    array_values($arr) array 返回数组所有元素 复制代码 代码如下: <?php $arr = array("a", "b", "c"); $arr = array_flip($arr); //反转数组的下标和值现在的$arr = array(0, 1, 2); $arr = array_values($arr); //返回数组$arr中的所有元素 print_r($arr); //结果: ···

    PHP编写RESTful接口的方法

    这是一个轻量级框架,专为快速开发RESTful接口而设计。如果你和我一样,厌倦了使用传统的MVC框架编写微服务或者前后端分离的API接口,受不了为了一个简单接口而做的很多多余的coding(和CTRL-C/CTRL-V),那么,你肯定会喜欢这个框架! 先举个栗子 1、写个HelloWorld.php,放到···

    深入理解ES7的async/await的用法

    在最开始学习ES6的Promise时,曾写过一篇博文 《promise和co搭配生成器函数方式解决js代码异步流程的比较》 ,文章中对比了使用Promise和co模块搭配生成器函数解决js异步的异同。 在文章末尾,提到了ES7的async和await,只是当时只是简单的提了一下,并未做深入探讨。 在前两个···

    bootstrap 弹出框modal添加垂直方向滚轴效果

    效果图预览 1. 添加css样式 .modal-dialog{position: absolute; top: 0; bottom: 0; left: 0; right: 0;} .modal-content{/*overflow-y: scroll; */ position: absolute; top: 0; bottom: 0; width: 100%;} .modal-body{overflow-y: scroll; position: absolute; top: 55p···

    php函数serialize()与unserialize()用法实例

    本文实例讲述了php函数serialize()与unserialize()用法。分享给大家供大家参考。具体方法如下: 该实例主要讲述了php函数serialize()与unserialize()说明及案例。想要将已序列化的字符串变回 PHP 的值,可使用unserialize()。serialize()可处理除了resource之外的任何类型。甚···

    DedeCms 常用函数参考:动态模板类

    DedeCms V5.3 常用函数参考:动态模板类   核心类文件  include/dedetemplate.class.php  用途:用于非核心模块的动态页面或列表页的模板解析,如:member/content_list.php ,通常是在 datalistcp.class.php 中使用,这个类在动态运行的情况下,由于本身···

    PDO防注入原理分析以及注意事项

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下两个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特别注意什么? 一、为何要优先使用PDO? PHP手册上说得很清楚: 复制代码 代码如下: Pre···

    PHP实现mysqli批量执行多条语句的方法示例

    本文实例讲述了PHP实现mysqli批量执行多条语句的方法。分享给大家供大家参考,具体如下: 可以一次性的执行多个操作或取回多个结果集。 实例: <?php $mysqli = new mysqli("localhost", "root", "111111", "test"); /* check connection */ if (mysqli_connect_errno···

    30个mysql千万级大数据SQL查询优化技巧详解

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num···

    dedecms支付宝接口问题及解决方法

    的情况: 系统只集成了支付宝。其他情况可能会有不同的及我国,呵呵,这里只把我遇到的问题进行分享   在DEDECMS系统上设置好了商家ID、密钥、支付宝邮箱之后,理论上应该是直接可以用了,但是我还是遇到了问题   首先就来了一个ILLEGAL_ARGUMENT错误。  ···