微信JS-SDK选择图片遇到的坑

有个需求要在微信企业号里面做开发,有个功能是选择图片,使用input标签肯定是不管用了,Android手机上不能多选,所以使用了微信的JS-SDK提供的相关API,这个地方真的是有坑,记录一下。按照文档直接引入js文件即可,如果使用的是Vue,也可以使用weixin-js-sdk,两种方式都可以。

图片在Android上无法预览

js-sdk的chooseImage接口返回的结果是localId,类似于wxLocalResource://xxxxxx,如果想得到它的base64串需要再调用getLocalImgData方法,因为我们后台接口里需要用到这个base64串,所以通过这个接口来获取base64串作展示,而不是用文档里介绍的方法。那这里有个坑,从Android获取的localData是不带有base64前缀的,要处理一下。

selectImage: function () {

let context = this;

wx.chooseImage({

count: 9,

sizeType: ['compressed'],

sourceType: ['album', 'camera'],

defaultCameraMode: "normal",

success: function (res) {

// localIds是在data里定义的一个localId数组

context.localIds = res.localIds;

// 不能直接遍历这个数组

context.updateBase64Data(context.localIds.shift());

},

fail: function (res) {

alert('选择图片失败:' + res.errMsg);

},

});

},

updateBase64Data: function (localId) {

let context = this;

wx.getLocalImgData({

localId: localId, // 图片的localID

success: function (res) {

let localData = res.localData;

let prefix = 'base64,';

let index = localData.indexOf(prefix);

let actData = localData;

// 我现在是设置参数,如果是展示的话则应该是添加头部data:image/jpeg;base64,

if (index > -1) {

actData = localData.substring(index + 7);

}

// base64Array是在data里定义的一个base64串数组

context.base64Array.push(actData);

if (context.localIds.length > 0) {

context.updateBase64Data(context.loaclIds.shift());

} else {

// 执行处理

}

},

fail: function (res) {

alert('选择图片失败:' + res.errMsg);

},

});

},

getLocalImgData获取多张图片无响应

chooseImage方法获取到是一个localId的数组,如果直接遍历这个数组去调用getLocalImgData时它只会执行一次,后面的无论怎样都不会执行,猜测应该是跟它localId的获取有关系。所以采取了上面代码中递归的方式调用,当连续调用uploadImage上传图片时也要这么做。

Android无法选择原图

尽管在chooseImage方法可以通过sourceType字段指定是原图还是压缩后的图,但是只要调用了getLocalImgData方法,那获取到的base64串展示一定是模糊的。你在想是不是Android上面不能使用原图啊,错了,仔细看IOS上面的图也是不清楚的,测试发现确实是这样,原图1.8M,使用js-sdk选择的原图只有不到240K,那为什么Android会模糊但是IOS比较清楚呢,你是不是又想这不是IOS和Android系统的区别吧,把同一张图片通过getLocalImgData方法获取到的base64串做比对发现,Android上得到的base64串前缀是以gCM开头,而IOS则是以/9j/开头,从PC上选择的图也是以/9j/开头,自己解析的图片也是以/9j/开头,所以不是因为压缩变模糊了,是因为使用了不一样的编码变模糊了。如果真的想选择原图,先把图片上传到微信服务器,然后使用获取临时素材的接口https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID,把图片下载下来,经测试这样其实也是有压缩的,这个是企业号的API如果用公众号地址是https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID。代码就不贴了,与上面的基本一致。

Android微信代扣sdk无法拉起,微信JS-SDK选择图片遇到的坑相关推荐

  1. Android 11-第三方应用无法拉起微信适配

    Android 11 加强了隐私保护策略,引入了大量变更和限制,其中一个重要变更 -- 软件包可见性 ,将会导致第三方应用通过微信OpenSDK的接口无法正常拉起微信,从而无法使用微信的全部功能,包括 ...

  2. Android多媒体功能开发(4)——调用系统Activity拍照、选择图片、查看图片、裁剪图片

    一.拍照 拍照界面就是调用系统照相机,动作为MediaStore.ACTION_IMAGE_CAPTURE.生成的照片有三种返回方式: 在调用拍照应用的Intent中通过EXTRA_OUTPUT属性设 ...

  3. Android第三方绑定QQ无法拉取授权页面

    在Android开发中,经常需要绑定QQ,正确的作法去QQ互联上查看实现步骤就可以了,我这里主要说的是,比如第一次用QQ登录,然后退出登录,第二次继续点击QQ登录,但是中间无法出现授权状态的拉取界面, ...

  4. 【微信小程序】简单实现QQ发说说选择图片并显示功能

    简单实现QQ发说说选择图片并显示效果 实现效果: 代码实现:(复制可用) index.wxml: <view class="top"><view>取消< ...

  5. 微信开放JS SDK,再次给浏览器们上了一课

    2015 年刚刚开始,微信 JS SDK 发布,惊爆众人,HTML5 产业好事连连. JS SDK 这个概念,其实微博和淘宝的开放平台很早前就有,包括手机 QQ 前段时间也推出了几个增强 API,但都 ...

  6. 微信开放JS SDK,这场web巨变意味着什么?

    原文链接:原文链接 作者王安 如有侵权请及时联系,立即删除. 摘要:微信近期推出JS SDK,开放了包括分享.图像.地理位置.微店.微信支付等11个接口.新能力给公众号运营者.开发者更多的玩法.而这样 ...

  7. Android 最新版 Paypal 智能付款按钮 Paypal JavaScript SDK 集成:Smart Payment Buttons

    前言: 我们在2017年,在我们的业务中接入了paypal支付,当时使用的PayPal Android SDK,github地址  ,期间一切正常,最近paypal官方发来一封邮件,重要集成变更 在P ...

  8. 微信小程序 - 选择图片、预览图片、删除图片

    为什么80%的码农都做不了架构师?>>>    小程序开发中你可能会遇到上传的图片首先会选择图片之后预览看下或者不满意需要删除图片,才会提交吧,这样应该是一个比较好的处理方式. 微信 ...

  9. 微信小程序无埋点数据采集方案

    相信业务团队对这样的场景不会太陌生: 打点需求:每新上一个功能,数据产品便会同步加上打点需求,当数据打点上线后一段时间,数据产品/业务产品便会针对数据的转化率分析和对业务需求的调整: 打点正确性验证: ...

  10. 微信JS SDK开放,前端开发者“鸡冻”了!

    HTML5又一次逆袭了,其实之前微信也是有一些JS API的,比如分享.但这次一股脑开放了拍摄.录音.语音识别.二维码.地图.支付.分享.卡券等几十个API,这条消息不需宣传,瞬间就占满了HTML5从 ...

最新文章

  1. matlab生产正弦mif文件
  2. JAVA中栈和堆总结
  3. request.getRequestDispatcher()的两个方法forward()/include()!!!
  4. 2021.02.18 Visual QA论文阅读
  5. traceroute和mtr
  6. 【前端】前端笔试题 [1]
  7. A Brief History of NoSQL (转)
  8. 这 4 款实用小工具,能让你的电脑变得好用又骚气
  9. mysql分区表优缺点,Mysql 表分区和性能
  10. windows server2008服务器文件上传受限制怎么办,windows server 2008 服务器上传限制
  11. 算法:91. 解码方法
  12. 视频教程-玩转Python-Python3基础入门-Python
  13. jquery boxy插件
  14. Scala 函数式编程(一) 什么是函数式编程?
  15. 倪海厦天纪笔记16_倪海厦《天纪·天机道》笔记
  16. 支持p2p的m3u8.php,m3u8视频播放器集成p2p加速源码分享
  17. springboot使用FileAlterationMonitor完成对指定文件夹下面指定文件的动态监控
  18. Unity VFX学习系列 —— 效果制作(烟花)
  19. WSL / WSL2 问题大全 及 解决方案
  20. AU变声功能音频调节

热门文章

  1. CPU的工作原理和内部架构
  2. 全网优惠券、红包获取api
  3. 云盘+Git GUI实现云盘文件版本控制
  4. python 循环高级用法 [expression for x in X [if condition] for y in Y [if condition] ... for n in N [if con
  5. c语言中实型变量的三种类型,在C语言中实型变量分为两种类型.doc
  6. 虚拟化实战——存储(二)
  7. java中文转换为拼音的pinyin4j学习笔记
  8. 公司-瑞幸咖啡:瑞幸咖啡
  9. 如何根据论文提供的敏感度与特异度求出ROC/AUC
  10. 绩效考核管理方案文档