关于微信小程序获取小程序码并接受buffer流保存为图片的方法


Posted in Javascript onJune 07, 2019

前言

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

操作

因为我获取到了微信那里的图片的图片流一直不知道怎么处理,今天总算找到相关文档,解决了。因为数据流不能直接传给前端,只好把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。觉得自己摸鱼摸得好厉害,不过终于把坑爬出来,特别开心。哈哈哈~以后要多多写开发记录。上班期间码得很随意

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

Javascript 相关文章推荐
Jquery选中或取消radio示例
Sep 29 Javascript
Jquery方式获取iframe页面中的 Dom元素
May 07 Javascript
JavaScript实现简单图片滚动附源码下载
Jun 17 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
Jan 19 Javascript
Javascript操作dom对象之select全面解析
Apr 24 Javascript
Javascript实现数组中的元素上下移动
Apr 28 Javascript
详解利用jsx写vue组件的方法示例
Jul 17 Javascript
微信小程序对接七牛云存储的方法
Jul 30 Javascript
微信小程序使用form表单获取输入框数据的实例代码
May 17 Javascript
Javascript实现动态时钟效果
Nov 17 Javascript
微信小程序日历插件代码实例
Dec 04 Javascript
vue实现在线学生录入系统
May 30 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 #Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 #Javascript
你了解vue3.0响应式数据怎么实现吗
Jun 07 #Javascript
ES6小技巧之代替lodash
Jun 07 #Javascript
vue+element 模态框表格形式的可编辑表单实现
Jun 07 #Javascript
vue-cli3项目展示本地Markdown文件的方法
Jun 07 #Javascript
Element实现表格分页数据选择+全选所有完善批量操作
Jun 07 #Javascript
You might like
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
PHP教程 变量定义
2009/10/23 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
ie下动态加态js文件的方法
2011/09/13 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
python多进程使用函数封装实例
2020/05/02 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
应聘教师推荐信
2013/10/31 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
六一亲子活动总结
2014/07/01 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
2014年班主任工作总结
2014/11/08 职场文书
店铺转让协议书
2014/12/02 职场文书
实习协议书
2015/01/27 职场文书
质量保证书格式
2015/02/27 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
员工考勤管理制度
2015/08/06 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
详解Python requests模块
2021/06/21 Python
Go语言读取txt文档的操作方法
2022/01/22 Golang