关于微信小程序获取小程序码并接受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 EasyUI API 中文文档 - ProgressBar 进度条
Sep 29 Javascript
随鼠标上下滚动的jquery代码
Dec 05 Javascript
使用js如何实现全选与全不选
Dec 30 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
Feb 21 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
Aug 07 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
Aug 31 Javascript
JS实现的最简Table选项卡效果
Oct 14 Javascript
Bootstrap CSS组件之大屏幕展播
Dec 17 Javascript
基于JavaScript实现瀑布流效果
Mar 29 Javascript
对layui中表单元素的使用详解
Aug 15 Javascript
Vue v-bind动态绑定class实例方法
Jan 15 Javascript
Vue $emit()不能触发父组件方法的原因及解决
Jul 28 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 SQLite类
2009/05/07 PHP
那些年一起学习的PHP(二)
2012/03/21 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
2016/11/22 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
印度在线杂货店:bigbasket
2018/08/23 全球购物
JAVA软件工程师测试题
2014/07/25 面试题
公司道歉信范文
2014/01/09 职场文书
护士辞职信范文
2014/01/19 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
岗位说明书怎么写
2014/07/30 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
政协工作总结2015
2015/05/20 职场文书