公司公众号项目,之前是使用Vant框架 构建。一期的时候上传图片使用Vant提供 的Uploader组件,当时没有提到要为客户提供多图上传这个功能,且测试的小姐姐当初的iphone很给力 ,几乎没什么问题。

一期上线,二期优化来了。重点是要提供多图上传,奔溃的是ios端Uploader组件还是一如既往的很给力,然到了安卓手机上,完全不起作用。尝试了网友说得将multiple 放到末尾并且赋值 ,但是并不能唤起安卓的多图选择。

<van-uploader :before-read="beforeRead" :after-read="afterRead" :before-delete="deletImg":max-count="maxSize" v-model="fileList" multiple ><van-icon name="plus" />
</van-uploader>
设置成
<van-uploader :before-read="beforeRead" :after-read="afterRead" :before-delete="deletImg":max-count="maxSize" v-model="fileList" :multiple="true"><van-icon name="plus" />
</van-uploader>

此时才发现 Vant官网Uploader的坑(部分安卓不支持,笑哭~),希望下个版本可以支持

只能改组件了,此时想到了微信原生的chooseImage

微信针对图片封装了一系列的方法chooseImage、previewImage、uploadImage、downloadImage、getLocalImgData,微信开发文档链接:微信上传文档

//拍照或从手机相册中选图接口
wx.chooseImage({count: 1, // 默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有success: function (res) {var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片}
});//预览图片
wx.previewImage({current: '', // 当前显示图片的http链接urls: [] // 需要预览的图片http链接列表
});//图片上传,上传到微信的服务器
wx.uploadImage({localId: '', // 需要上传的图片的本地ID,由chooseImage接口获得isShowProgressTips: 1, // 默认为1,显示进度提示success: function (res) {var serverId = res.serverId; // 返回图片的服务器端ID}
})//下载图片
wx.downloadImage({serverId: '', // 需要下载的图片的服务器端ID,由uploadImage接口获得isShowProgressTips: 1, // 默认为1,显示进度提示success: function (res) {var localId = res.localId; // 返回图片下载后的本地ID}
});//获取本地图片
wx.getLocalImgData({localId: '', // 图片的localIDsuccess: function (res) {var localData = res.localData; // localData是图片的base64数据,可以用img标签显示}
});

1、我将用到的微信上传方法封装成为一个文件,在开发中首先要引入微信的JSSDK文件,然后注册所需要的jsApi。注册时要调用后端的接口生成签名数据

init(params,number,callback){let config = null;getWxSign(params).then(res =>{if(res.code == 200){config = wxSign({ticket:res.content.ticket,appId:res.content.appid})wx.config({debug: false, // 开启调试模式appId: config.appId, //公众号的唯一标识timestamp: config.timestamp, //生成签名的时间戳nonceStr: config.nonceStr, //生成签名的随机串signature: config.signature, //签名jsApiList: ['chooseImage','uploadImage', 'downloadImage','getLocalImgData'], // 使用的JS接口列表});wx.ready(function(){wxUpload.chooseImage(number, callback);})}}).catch(error => {Toast(error);})
},

2、然后调用微信选择照片的方法,唤起微信拍照(从相册选取)功能

chooseImage(number, callback){wx.checkJsApi({jsApiList: ['chooseImage'],success: function(res) {if(res.checkResult.chooseImage){wx.chooseImage({count: number,sizeType: ['original', 'compressed'], //是原图还是压缩图,默认二者都有sourceType: ['album', 'camera'], //来源是相册还是相机,默认二者都有success: function(res){Toast.loading({message: "加载中...",duration: 0,forbidClick: true})wxUpload.readImage(res.localIds, callback) //选定照片的本地ID列表},fail: function(error){Toast.clear();}})}}})
},

3、获取上传图片本地列表 ,imageData就是你最后从微信拿到的图片数据

readImage(localIds, callback){const imageData = []for(let i=0; i< localIds.length; i++){wx.getLocalImgData({localId: localIds[i].toString(),success(res) {const localData = res.localData;let imageBase64 = '';if (localData.indexOf('data:image') == 0) {//ios直接赋值imageBase64 = localData;}else{//安卓在拼接前要进行换行符的全局替换imageBase64 = 'data:image/jpeg;base64,' + localData.replace(/\n/g, '');}let fileData = wxUpload.dataURLtoFile(imageBase64);imageData.push(fileData)if(i == localIds.length-1){callback && callback(imageData)}},fail(res){Toast.clear();}})}
},

整体功能并没有多复杂,只是调试的时候挺费劲。必须传到服务器上才可看到效果。希望各位分享下本地如何调试类似的功能 

我将完整的微信封装上传功能上传到我的资源服务器,大家有需要可以下载

本次记录完事,拜拜

微信H5公众号chooseImg上传图片相关推荐

  1. 微信H5公众号获取openid爬坑记

    前要: 之前做过的公众号授权一般是在登录时的,最近遇到一个直接微信打开企业微信发过来的链接进去预约页面,需要进来时查询当前微信的用户有没有预约过对应的申请,如果有就跳转到index的列表页,没有的话留 ...

  2. uniapp微信H5公众号授权与支付

    目录 前言 准备工作 配置回调域名 授权方式 参数 完整代码 前言 网页授权微信官方文档:网页授权 | 微信开放文档 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基 ...

  3. 微信H5公众号支付问题-(get_brand_wcpay_request:fail)2017年10月

    微信支付文档确实做的有很多不足的地方,基于以上情况本人对于微信支付遇到get_brand_wcpay_request:fail做出如下解决方案: function jsApiCall() {Weixi ...

  4. VUE:微信H5公众号页面禁用分享

     JSSDK配置wx.config /* * jssdk初始化 * */ export function initSdk(appId,nonceStr,signature,timestamp,apiL ...

  5. 企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET

    企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET 原文:企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET 先看效果 1.本文演示的是 ...

  6. 骏飞H5幸运刮刮乐源码多级分佣+upupw直接架设+H5微信登陆公众号接入 管理员

    简介: 骏飞H5幸运刮刮乐源码多级分佣+upupw直接架设+H5微信登陆公众号接入 管理员 网盘下载地址: http://kekewl.net/pWg5xjUEhkm0 图片:

  7. PHP开发B2C商城 微信小程序商城系统源码+数据库,轻量级前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP

    项目介绍 一款轻量级.高性能.前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP,前后端源码完全开源,看见及所得,完美支持二次开发,可学习可商用,让您快速搭建个性化独立商城. 完整代 ...

  8. 微信公众号-java上传图片素材到微信服务器基于事件推送两条消息

    微信公众号-java上传图片素材到微信服务器&基于事件推送两条消息 场景:基于微信扫码登录/关注事件,向用户推送两条消息. 分析:翻阅了微信开发者文档和一些其他资料发现,公众号针对用户关注/扫 ...

  9. php 公众号内h5支付宝支付宝支付宝支付宝支付,微信浏览器中支付宝wap支付和微信JSAPI公众号支付...

    手机浏览器只有支付宝wap支付,微信浏览器中出现支付宝wap支付和微信JSAPI公众号支付,其中支付宝wap在线支付没有在新窗口打开(兼容大部分手机),Thinkphp3.2公众号支付 下载资源 下载 ...

最新文章

  1. .NET 获得指定XML配置文件内容
  2. 通用路由封装(GRE)×××配置
  3. 《SQL Server 2008从入门到精通》--20180716
  4. C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息
  5. python怎么安装xlrd库_Python第三方库xlrd/xlwt的安装与读写Excel表格
  6. Android开发笔记(四十三)点击事件
  7. php 父进程id,PHP pcntl_fork创建进程,复制父进程内存空间上下文
  8. W25Q256编程时需要关注的器件特性
  9. 多测师肖sir__金牌高级讲师软件测试___疑难杂症之app端口占用
  10. 华为交换机配置时区_华为交换机设置时间问题
  11. 地坛——我的最爱 (2006-11-12 09:33:18)
  12. JavaScript数组every方法
  13. android p适配三星s86,感受三星S8屏幕震撼 先过APP适配这道坎
  14. 在利用计算机高级语言进行,2016计算机一级考试多选题专项训练及答案
  15. objdump指令 elf文件转成lst文件
  16. html如何固定字号,css怎么控制字体大小?
  17. 微信小程序消息推送,实现未完成计划的在微信内的定时提醒功能
  18. 笔记本固态硬盘温度测试软件,固态硬盘散热测试
  19. MATLAB基础应用精讲-【基础知识篇】MATLAB中的标点符号
  20. Java支付宝当面付demo实例配置沙箱

热门文章

  1. 想学3dmax应该怎么学?
  2. 【面试招聘】 科班小硕的2020年面试小结
  3. XMLWorkerHelper生成pdf文件添加页眉页脚
  4. 看完这篇,你一定会打开谷歌搜索...
  5. windows自动卸载程序
  6. 登录江苏人社网办大厅
  7. vue 使用video加载视频进行展示,视频循环自动播放
  8. 网络安全——Webshell管理工具
  9. golang mongodb驱动mgo异常崩溃问题
  10. 极客”一词,来自于美国俚语“geek”的音译,一般理解为性格古怪的人