关于微信小程序获取小程序码并接受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 相关文章推荐
JavaScript 面向对象编程(2) 定义类
May 18 Javascript
添加JavaScript重载函数的辅助方法2
Jul 04 Javascript
js+css实现的简单易用兼容好的分页
Dec 30 Javascript
浅析jquery某一元素重复绑定的问题
Jan 03 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
May 20 Javascript
Jquery遍历Json数据的方法
Apr 20 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
Jun 30 Javascript
JavaScript 日期时间选择器一些小结
Apr 02 Javascript
JavaScript中this函数使用实例解析
Feb 21 Javascript
vue 调用 RESTful风格接口操作
Aug 11 Javascript
JavaScript的一些小技巧分享
Jan 06 Javascript
html中两种获取标签内的值的方法
Jun 16 jQuery
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
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
javascript 拖放效果实现代码
2010/01/22 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
Python3安装Pymongo详细步骤
2017/05/26 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
python获取linux系统信息的三种方法
2020/10/14 Python
电大自我鉴定
2013/10/27 职场文书
应届毕业生求职信
2013/11/30 职场文书
电子商务专业求职信
2014/03/08 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
公司职员入党自传书
2015/06/26 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
工作会议简报
2015/07/20 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL