关于微信小程序获取小程序码并接受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 相关文章推荐
让广告代码不再影响你的网页加载速度
Jul 07 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
Mar 06 Javascript
jquery操作select详解(取值,设置选中)
Feb 07 Javascript
Jquery方式获取iframe页面中的 Dom元素
May 07 Javascript
jquery实现的横向二级导航效果代码
Aug 26 Javascript
js给table赋值的实例代码
Oct 13 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
Vue.js基础知识小结
Jan 13 Javascript
基于angular实现三级联动的生日插件
May 12 Javascript
详解Node.js access_token的获取、存储及更新
Jun 20 Javascript
你点的 ES6一些小技巧,请查收
Apr 25 Javascript
JavaScript实现缓动动画
Nov 25 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 setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
python3.x上post发送json数据
2018/03/04 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
python for循环remove同一个list过程解析
2019/08/14 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
python交互模式基础知识点学习
2020/06/18 Python
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
地理教师岗位职责
2014/03/16 职场文书
房屋委托书范本
2014/04/04 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书