时间:2021-05-25
有个需求要在微信企业号里面做开发,有个功能是选择图片,使用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。代码就不贴了,与上面的基本一致。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本部分需要用到微信的js-sdk,微信js-sdk是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信js-sdk,网页开发者可借助微信高
最近开发微信公众号内嵌H5页面,使用vue搭建的项目,由于业务需求,需要实现微信自定义分享功能,所以项目中集成微信JS-SDK。微信JS-SDK是微信公众平台面
用于记录接入微信JS-SDK的坑,以后方便查询第一次接入公众号微信支付、分享、定位等等的坑的时候,心里是迷茫而又恐惧。因为,听说坑特别多,后来发现自己的亲身体验
解决不显示摘要和图片的问题,需要调用微信公众号的js-sdk的api,需要前端和后台的配合,后台需要返回appid(公众号的appid)、timestamp(生
项目中遇到需要选取照片上传的需求,因为网页运行在微信的浏览器里面,所以用微信的js-sdk提供的选取照片功能,来进行项目开发。实际开发中需要用到微信web开发者