学而时习之微信小程序1.2

  • 小程序uploader组件
  • 小程序uploader api
  • 云开发Cloud.uploadFile
  • 项目代码
  • end


小程序uploader组件

小程序uploader api

官方API:uploader 文档很详细,按照步骤来,配置好后台服务器,单图或多图上传都在后台处理,后台返回服务器上的图片给前端显示即可。

云开发Cloud.uploadFile

因为初学小程序,也想更多了解微信生态。所以选择云开发。上传文件也采用云开发上的文件存储。
官方API:云开发Cloud.uploadFile。
官方小程序模板里面给了个单图上传的demo,但有时会碰到多图上传的情况。然后这一次找遍了,没找到一次性上传多个文件的官方接口。
多图上传在目前应用市场上也算刚需,搞微信开发不可能没有遇到过,云开发出来也有一段时间了,摸石头过河也会民间的解决办法。
于是google了一番,多数文章使用遍历图片路径上传,最后使用的还是官方单图上传接口,只是图片二进制还是转base64的区别。
看来不管是巧妇还是笨蛋都难为无米之炊,在这里只希望微信云开发尽快推出多图上传接口,跟真正的后台服务器看齐。

项目代码

官方提供的上传组件一般需求应该够用了吧,提供的API也很详细。
uploader组件官方地址 wxml,json按官方方式引入即可。
js文件贴一下上传接口。

uplaodFile(files) {
    console.log('upload files', files)
    // 文件上传的函数,返回一个promise
    return new Promise((resolve, reject) => {
      const tempFilePaths = files.tempFilePaths;
      //上传返回值
      const that = this;
      const object = {};
      for (var i = 0; i < tempFilePaths.length; i++) {
        let filePath = '',cloudPath = ''
        filePath = tempFilePaths[i]
        // 上传图片
        // cloudPath 最好按时间 遍历的index来排序,避免文件名重复
        cloudPath = 'blog-title-image-' + new Date().getTime() + '-' + i + filePath.match(/\.[^.]+?$/)[0]

        console.log(filePath)
        console.log(cloudPath)
        const upload_task = wx.cloud.uploadFile({
          filePath, 
          cloudPath, 、
          success: function(res) {
            console.log(res)
            // 可能会有好几个200+的返回码,表示成功
            if (res.statusCode === 200  || res.statusCode === 204 || res.statusCode === 205) {
              const url = res.fileID
              that.data.files.push(url)
              if (that.data.files.length === tempFilePaths.length) {
                object.urls = that.data.files;
                resolve(object)  //这就是判断是不是最后一张已经上传了,用来返回,
              }
            } else {
              reject('error')
            }
          },
          fail: function(err) {
            console.log(err)
          }, 
          conplete: () => {
            
          }
        })
      }
    })
  },

tip:
(1)cloudPath最好按时间 遍历的index来排序,避免文件名重复
(2)可能会有200,204等返回码,都表示成功状态

end