微信小程序之云存储

微信小程序关于云存储的使用

1、为什么要使用云存储

云存储依托云开发,在开发基于云开发的微信小程序时,微信为开发者提供了一块存储空间,我们可以将文件上传到云端,同时也可以从云端下载资源,也就方便了用户之间的交互

2、云存储相关API

微信提供了两个API来进行云存储相关的操作,包括上传文件和下载文件,wx.cloud.uploadFilewx.cloud.downloadFile,这两个API就可以完成所有的需求了

3、实例

假设我们有一个需求是用户发布一个类似朋友圈的消息,在小程序中,将相关内容存入数据库,我们可以将用户发布的文字存入数据库,但是如果用户想要发图片了,如何存储,有人可能会想这还不简单,把图片的地址存一下,下次直接加载不就行了,那地址是什么了,你确定下次加载的时候还在吗,这么多问题就不考虑了,很简单直接存储到云开发提供的空间中去,下面是一个将照片存储到云函数的代码

// 让用户选择一张图片
wx.chooseImage({
  success: chooseResult => {
    // 将图片上传至云存储空间
    wx.cloud.uploadFile({
      // 指定上传到的云路径
      cloudPath: 'photo.jpg',
      // 指定要上传的文件的小程序临时文件路径
      filePath: chooseResult.tempFilePaths[0],
      // 成功回调
      success: res => {
        console.log('上传成功', res)
      },
    })
  },
})

这只是一个普通的代码,就是用户选择一张照片将其存入进去,然后在云开发控制台存储中看到那张照片,可是如果你再选择一张就会发现第一次的照片没了,只有新传上去的一张照片,这是为什么了,可以看到有一个叫做cloudPath的属性,从名字上看就知道啥意思了,云路径,也就是上传之后照片的在云存储中的路径,路径设置一样后来者当然把前面的给抵消了

4、上传路径唯一问题

用户上传的内容存储到数据库中我们都会设置一个唯一索引_id,一般来说这个id是唯一的,所以我们可以以此来作为存储的路径名

const uploadTasks = fileList.map((file, index) =>
 this.uploadFilePromise(`${res._id}.jpg`, file)  //存储数据后获得该记录的_id
);
Promise.all(uploadTasks)
 .then(data => {
   //wx.showToast({ title: '上传成功', icon: 'none' });
   Toast.success("发布成功");
   const fileList = data.map(item => ({ url: item.fileID }));
   console.log(data[0].fileID)
   this.setData({ cloudPath: data, fileList: fileList });
 })
 .catch(e => {
   wx.showToast({ title: '发布失败', icon: 'none' });
   console.log(e);
 });
}

//文件上传
uploadFilePromise(fileName, chooseResult) {
    return wx.cloud.uploadFile({
      cloudPath: fileName,
      filePath: chooseResult.path
    });
  },

你可能感兴趣的:(微信小程序云开发)