评论

云开发批量上传图片,上传完图片再上传数据库 [即抄即用,拎包入住]

粘贴帝之友

大家好,又是我拎包哥,今天我们来实现在云开发中批量上传图片。

经过Stephen哥的指正,我改用了Promise.all的方法来达到目的。

Promise.all的作用就是等待所包含的promise函数结束后再执行下一步逻辑,非常方便好用!
const db = wx.cloud.database()
const test = db.collection('test')
Page({
    onLoad() {
        this.imgList = []
        wx.chooseImage({
            success(res) => {
                this.TFP = res.tempFilePaths
            }
        })
    },

    btn() {
        let promiseMethod = new Array(this.TFP.length)
        for (let i = 0; i < this.TFP.length; i++) {
            promiseMethod[i] = wx.cloud.uploadFile({
                cloudPath'img' + i + '.png',
                filePaththis.TFP[i]
            }).then(res => {
                this.imgList.push(res.fileID)
            })
        }

        Promise.all([...promiseMethod]).then(() => {
            test.add({
                data: {
                    imgListthis.imgList
                }
            })
        })
    }
})


--------------------------------------我是分割线--------------------------------------

async await

要点:

  1. ctrl c + ctrl v
  2. 这里用了await阻塞在wx.cloud.uploadFile前面,避免还没上传完图片就往数据库插入数组。减少了then里的代码,美观逼格高。嘻嘻嘻。
  3. await wx.cloud.uploadFile不能放在wx.chooseImage里,如果可以的话,请告诉我怎么做,谢谢!

欢迎交流,指出错误,我立刻修改么么哒。

标准版

const db = wx.cloud.database()
const test = db.collection('test')
Page({
  onLoad() {
    this.imgList = []
      wx.chooseImage({
      success: (res) => {
        this.TFP = res.tempFilePaths        
      }
    })
  },
  
  async btn() {
    this.imgList = []
    console.log(this.TFP)
    for (let i = 0; i < this.TFP.length; i++) {
      await wx.cloud.uploadFile({
        cloudPath: 'img' + i + '.png',
        filePath: this.TFP[i]
      }).then(res => {
        this.imgList.push(res.fileID)
      })
    }
    test.add({
      data: {
        imgList: this.imgList
      }
    })
  }
})


新手最爱一锅炖版(不推荐)

为什么不推荐呢,因为选择图片并不意味着要上传图片,用户还没进行最终的确定操作(不过可以用来了解async await)

onLoad() {
    this.imgList = []
    wx.chooseImage({
      success: async res => {
        this.TFP = res.tempFilePaths
        for (let i = 0; i < this.TFP.length; i++) {
          await wx.cloud.uploadFile({
            cloudPath: 'img' + i + '.png',
            filePath: this.TFP[i]
          }).then(res => {
            this.imgList.push(res.fileID)           
          })
        }
        test.add({
          data: {
            imgList: this.imgList
          }
        })
      }
    })
  }



==========================end==========================

最后一次编辑于  2020-05-17  
点赞 12
收藏
评论

12 个评论

  • 小肥羊🍊
    小肥羊🍊
    2020-02-27

    看后有收获,非常感谢分享。

    2020-02-27
    赞同
    回复 1
    • 拎包哥
      拎包哥
      2020-02-27
      奥利给!
      2020-02-27
      回复
  • 何芷怡
    何芷怡
    2020-02-27
    在CSDN找了好久没找到。。。🙏感谢
    2020-02-27
    赞同
    回复

正在加载...

登录 后发表内容