一、效果图

二、taro 提供了选择图片的接口

https://taro-docs.jd.com/taro/docs/apis/media/image/chooseImage

// 文档提供的示例
Taro.chooseImage({count: 1, // 默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有,在H5浏览器端支持使用 `user` 和 `environment`分别指定为前后摄像头success: function (res) {// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片var tempFilePaths = res.tempFilePaths}
})

三、代码实现

分两个部分: 使用七牛上传图片、更换个人信息

1、使用七牛上传图片

上传七牛先要获取到七牛的token,这是后端提供获取token的接口

后端提供把图片上传到七牛的接口

更换个人信息的接口

在工具文件中中封装好了上传到七牛的请求函数

/*** 上传到七牛* @param [] list , list 里面是 file Object 的 Array { url: 本地链接, file: 源文件}*/
const transImgList = async (list) => {let imgTransPromise = list.map (item => {const qiniuTokenData = getGlobalData('qiniuTokenData');  //从缓存中获取的tokenconst otherparams = getSignDataAndOtherParams()  // 请求的必填参数,看自己的项目// console.warn('item.url', item.url)//appConfig.apiPrefix  是自己的服务器地址return Taro.uploadFile({url: `${appConfig.apiPrefix}/upload/img/one?${stringify(otherparams)}`,filePath: item.url,name: 'file',header: {Authorization: `token ${qiniuTokenData.token}`  //把token拿到,看自己的数据来获取},formData: {key: item.url},}).then ((res) => {let newImg = '';try {newImg = JSON.parse(res.data)['fileURL'];} catch (error) {newImg = '';}return newImg;})});let imgs = await Promise.all(imgTransPromise).then((imgList) => {return imgList});return imgs;  // 请求成功会返回图片的地址
}

在更换个人信息的页面中,在页面挂载的时候,获取到token

componentDidMount() {// 获取七牛Tokenthis.props.dispatch({type: 'qiniuUploader/fetchgetQiniuToken'   // 使用的是dva状态管理,请求获取token的接口}).then(res => {setGlobalData('qiniuTokenData', res.response.data) // 把token存储在全局缓存中})}

页面显示, 点击头像区域触发回调handleOperaClick

 <View className="portrait flex-box jc-sb ai-ce" onClick={this.handleOperaClick} data-flag="portrait"><Text className="portrait-text flex-box ai-ce" >头像</Text><Image className="portrait-image flex-box ai-ce" src={utils.deepGet(userInfo, 'headImg')} /></View>

回调handleOperaClick

  handleOperaClick = (e) => {e.preventDefault();let {flag,} = e.currentTarget.dataset;switch (flag) {case 'portrait': {// 从手机相册中选择图片或使用相机拍照Taro.chooseImage({count: 1, sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['album', 'camera'],  // 可以指定来源是相册还是相机}).then( async (res)=> {  //我使用链式写法,也可以使用官方文档提供的方式console.warn('chooseImage then', res)const files = [];  // 以下几行代码是为了处理成自己想要的格式[{file: {path: '', size: ''}, url: '' }]const obj = {};obj.file = res.tempFiles[0];obj.url = res.tempFilePaths[0];files.push(obj);  console.warn('then obj', files)// 上传到七牛返回的图片连接,可以在线访问const itemImgUrlLIst = await utils.transImgList(files || [])console.warn('then itemImgUrlLIst', itemImgUrlLIst)Taro.showLoading();// 把返回的链接传给更换个人信息的接口,完成头像更换this.props.dispatch({type: 'mine/fecthupdatePersonInfo',payload: {headImg: itemImgUrlLIst[0]  // 因为是个数组,获取数组第一个元素}}).then(res => {if (res.resultCode === 200) {Taro.hideLoading();utils.showToastMsg('更换头像成功');// 更换调全局缓存的数据,要不显示不出来const userInfo = getGlobalData('userInfo');userInfo.headImg = itemImgUrlLIst[0];setGlobalData('userInfo', userInfo);this.componentDidMount();}})})break;}case 'name': {Taro.navigateTo({url: `/subMinePages/UpdateName/UpdateName`})break;}case 'phone': {Taro.navigateTo({url: `/subMinePages/UpdatePhone/UpdatePhone`})break;}case 'address': {Taro.navigateTo({url: `/subMinePages/MyAddress/MyAddress`})break;}default: {break;}}}

以上是更换个人头像的大致流程,其他如上传评论图片、售后添加图片等一些需要上传图片的页面,也类似的操作。

Taro 项目实现更改微信头像,使用七牛上传图片相关推荐

  1. 七牛上传图片html,MWEB+七牛 上传图片

    MWEB+七牛 上传图片 博客之前的图片也都用的七牛,但编辑和上传分离还是很麻烦,所以一直很心水meb, 上周mweb降到50¥,感觉短期内应该不会再降了,于是果断入手,今天在和使用图床功能遇到了一些 ...

  2. Android使用七牛上传图片踩坑及解决方案

    Android开发上传图片到七牛的步骤 1. 集成七牛SDK compile 'com.qiniu:qiniu-android-sdk:7.3.+' 2. 获得上传凭证token用于上传图片到七牛 这 ...

  3. 使用Simditor和七牛上传图片

    2019独角兽企业重金招聘Python工程师标准>>> Simditor是tower开源的一款网页编辑器官方网址:http://simditor.tower.im 为了使Simdit ...

  4. 七牛上传图片html,使用七牛云上传图片

    七牛云提供的空间还是很不错的.最近闲来无事,看了下七牛的相关东西,现把图片上传的部分记录一下 使用七牛云需要自己注册账号,这个就不再赘述,很简单的 申请好空间之后,上传需要一个上传凭证,七牛真的很体贴 ...

  5. 七牛上传图片初探 开始上传 暂停上传 继续上传

    效果 代码 public class MainActivity extends AppCompatActivity {ListView listview;AlbumList albumList;@Ov ...

  6. simditor上传图片php,使用Simditor和七牛上传图片

    Simditor是tower开源的一款网页编辑器官方网址:http://simditor.tower.im 为了使Simditor编辑文档时能将图片自动从前端上传到qn,需要修改它的uploader. ...

  7. HTML 七牛上传图片

    好记忆不如按烂笔头 ... ... 简介 七牛图片云存储,云操作做的还是很牛叉的,http://www.qiniu.com/ 没有为人打广告的意思. 给你一个上传图片的token ,就能往上面放置你的 ...

  8. vue 七牛上传图片

    这是我多年前写的 很多都忘了 从github找出来的 <template><div><w-subnav ref="subNav"></w- ...

  9. android递归压缩上传多张图片到七牛

    最近遇到这样一个需求:要做一个仿微信朋友圈的功能,要求上传最多九张图到七牛.七牛有上传图片的接口,但是每次只能上传一张.如果是九张图片一齐上传,使用for循环的话肯定不行的,很容易出错.因为上传七牛的 ...

最新文章

  1. Spring Boot2.0之整合Redis
  2. Tool/IDE之MinGW:MinGW(C++环境)的简介、安装、使用方法之详细攻略
  3. Java Web项目运行流程
  4. 【Awsome】GitHub 资源汇总(更新中)
  5. 二次优化大招(由泰勒公式推出最值条件)
  6. Linux shell逐行读取文件的方法-比较
  7. html print 边距,css print
  8. 计算机出现开机故障的原因,电脑开机出现英文故障?先别着急拿去修!几分钟教你轻松搞定...
  9. fastjson jsonobject 转bean失败_干掉quot;FastJsonquot;?
  10. codeforces731E Funny Game(DP)
  11. C++内存管理之shared_ptr
  12. DEVC配置C++11标准
  13. vue单页面html缓存问题,vue单页面 回退页面 keeplive 缓存问题
  14. 最小二乘法节点定位(1)——小知识:非线性方程线性化
  15. Solana首个IDO平台Solstarter前景如何?
  16. 互联网如何再定义古老的眼镜行业?
  17. 采用全球面螺旋线的 光纤陀螺仪
  18. 武汉2022专技公需课必修答案
  19. if condition 大于_「函数-基础篇」IF函数的应用
  20. [附源码]SSM计算机毕业设计高校奖学金评定管理系统JAVA

热门文章

  1. 视频转GIF软件有什么
  2. 中小企业知识管理的实施策略
  3. windows server 2019 安装AD域控制器
  4. A*算法python可视化实现
  5. python会导致电脑死机吗_什么原因会导致电脑经常死机!急
  6. 龙华区总工会举办“中秋庆团圆•工会送关爱”活动
  7. 相互宝成员来报到:宝宝们都在,让我们继续守护!暖心了
  8. Gnome 桌面美化
  9. idea 切换分支导致代码丢失问题
  10. 有什么软件可以学计算机二级,有没有学习计算机二级以及英语四级的软件推荐?...