关于微信小程序获取小程序码并接受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 相关文章推荐
一端时间轮换的广告
Jun 26 Javascript
DWR Ext 加载数据
Mar 22 Javascript
实现JavaScript中继承的三种方式
Oct 16 Javascript
javascript 浏览器检测代码精简版
Mar 04 Javascript
Date对象格式化函数代码
Jul 17 Javascript
JQuery.Ajax之错误调试帮助信息介绍
Jul 04 Javascript
IE、FF浏览器下修改标签透明度
Jan 28 Javascript
让浏览器DOM元素最后加载的js方法
Jul 29 Javascript
javascript鼠标滑过显示二级菜单特效
Nov 18 Javascript
JS实现unicode和UTF-8之间的互相转换互转
Jul 05 Javascript
Vue列表页渲染优化详解
Jul 24 Javascript
Angular4学习笔记之实现绑定和分包
Aug 01 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中用文本文件做数据库的实现方法
2008/03/27 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
XML的代替者----JSON
2007/07/21 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
2015/02/13 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
解决Python传递中文参数的问题
2015/08/04 Python
python 网络爬虫初级实现代码
2016/02/27 Python
Python类的动态修改的实例方法
2017/03/24 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
Python实现k-means算法
2018/02/23 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
Django中ORM的基本使用教程
2020/12/22 Python
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
函数指针的定义是什么
2016/08/14 面试题
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
写给女朋友的道歉信
2014/01/12 职场文书
建筑设计专业求职自我评价
2014/03/02 职场文书
佛光寺导游词
2015/02/10 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书