一、功能分析:
1、也是要有两个按钮(和修改昵称类似)就是可以选择用微信的头像,也可以自定义头像(直接copy name.wxml中的代码即可)
2、下面就不再是文本框了,而是一个image标签,并且还要实现上传图片的功能
二实现:
2、这个上传的功能,微信小程序已经帮我们封装好的了 微信开放文档-》chooseImage -》示例代码 (从本地相册选择图片或使用相机拍照)
==一般这种API都是可以回调的比如success 或者是用promise中的then和catch,基本上都是这样的一个套路了
wx.chooseImage({ count: 1, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success (res) { // tempFilePath可以作为img标签的src属性显示图片 const tempFilePaths = res.tempFilePaths } })
但是在这里我们成功回调的函数不适用success还是用promise的then的,这时候一般不太清楚回调的东西的时候,都是直接在then里面吧res打印出来的
即可定位到我们想要的数据上面了
handleUploadImage(){ wx.chooseImage({ // 这个count表示的是用户可以同时选择多少张图片 count: 1, // 这个type就是可以选择其中一个的,我们选择了压缩图片类型 sizeType: ['compressed'], // 这里表示的就是从相册中招还是直接拍照 sourceType: ['album', 'camera'], // success(res) { // // tempFilePath可以作为img标签的src属性显示图片 // const tempFilePaths = res.tempFilePaths // } }).then((res)=>{ // console.log(res) const tempFilePaths = res.tempFilePaths[0]; this.setData({ userPhoto: tempFilePaths }) }); }
通过这个方法就可以把本地的照片搞到小程序中的,但是这并不意味着我们已经把照片上传到数据库中的了
就是要在点击“自定义头像”的时候把图片上传到云端,就用到了那个“自定义图片”按钮的触发函数handleBtn了
===这种上传头像的操作,其实在数据库中是一个存储的操作了
涉及到【如何进行云存储和云上传文件】
查看 微信开发文档 -》云开发-》存储->wx.cloud.uploadFile即可(注意招这个上传文件的接口要招小程序端的,不要搞错找成是服务端的了)
(将本地资源上传至云存储空间,如果上传至同一路径则是覆盖。)
需要的参数就是两个,1云的路径(也就是要上传到哪里) 2文件的路径
直接使用示例代码中的
wx.cloud.uploadFile({ cloudPath: 'example.png', filePath: '', // 文件路径 success: res => { // get resource ID console.log(res.fileID) }, fail: err => { // handle error } })
并且在上传之前还要给用户一些提示(因为这种文件或者是什么上传还是要一定的时间,就给用户一些提示即可了)
每一次上传一个图片 然后点击“自定义”都会在云开发-》存储中 看到新的东西,就是因为使用了时间戳,导致每次上传的云路径都是不同的,
每次都是新的云路径了
三、修改自定义头像和微信头像
==通过uploadFile 上传了图片和文件之后返回的东西中,会有fileID ,其实小程序中都是通过这个fileID来对图片和文件进行更新的
因为图片都是从数据库中的users中读取出来的,所以如果要更新这个图片的话,也是要回到数据库中的
注意:那个fileID其实并不是上传头像的url,而是在云开发存储中的一个标识,在网页中是打不了这个fileID路径的
四、使用微信头像
在name.js也使用了 bindgetuserinfo这个函数,这个函数是在获取微信用户信息的按钮自带的
也是用了里面的模板
可以直接把之前在name.js里面写的copy过来了,并且还要更新到数据库中才行的