微信的雲數據庫爲非關係型JSON格式數據庫。所以處理上和關係型數據庫還是有一些區別的。
EG:我的博客信息
我們需要上傳的數據上傳的是雲數據庫。主要包括內容和圖片。圖片是上傳到雲存儲之中的。再上傳成功後,雲儲存也會返回一個對應的fileID。
所以在數據庫中存放的內容主要是:內容、圖片fileID、用戶標識openID、用戶暱稱、頭像、發佈時間
一、圖片上傳
在我們的微信中使用函數可以實現圖片上傳數據,但是隻能一次上傳一個,可以使用循環實現多圖上傳。
wx.cloud.uploadFile({
cloudPath:'blog/'+Date.now()+'-'+Math.random()*1000000+suffix,//雲端路徑
filePath:item,//當前文件臨時路徑
success:(res)=>{
},
fail:(err)=>{
}
})
}
其中cloudPath
爲求得雲端路徑,因爲上傳圖片不能重複,重複就會被覆蓋,所以我們要想好文件的名字這樣避免被覆蓋掉。
所以blog爲在雲端的文件夾+當前時間+一個數學隨機數*一堆0+後綴就組成它的名字。避免重複
後綴名通過正則表達式獲取
//當前圖片路徑
let item=this.data.images[i]
//取到文件擴展名
var suffix=/\.\w+$/.exec(item)[0]
並且成功後回給我們返回他的fileID
二、多數據插入雲數據庫
定義一個promiseArr數組來存放promiseArr對象
let promiseArr = []
for (var i = 0, len = this.data.images.length; i < len; i++) {
//每次循環new出來一個新的Promise對象,resolve表示成功,reject表示失敗
let p = new Promise((resolve, reject) => {
let item = this.data.images[i]
//取到文件擴展名
var suffix = /\.\w+$/.exec(item)[0]
//每次只能上傳一張照片
wx.cloud.uploadFile({
cloudPath: 'blog/' + Date.now() + '-' + Math.random() * 1000000 + suffix, //雲端路徑
filePath: item, //當前文件臨時路徑
success: (res) => {
console.log(res.fileID)
resolve()
},
fail: (err) => {
console.log(err)
reject()
}
})
})
promiseArr.push(p)
}
這樣我們就可以通過promiseArr
,將獲得到圖片信息全部存進去,也就可以獲取對象了。
之後將我們所要傳遞的信息傳送到雲數據庫中即可。
Promise.all(promiseArr).then((res)=>{
db.collection('blog').add({
data:{
...userInfo, //用戶信息
content:content, //內容 openID自動生成
img:fileIDs, //圖片
createTime:db.serverDate(), //服務端時間
}
}).then((res)=>{
wx.hideLoading()
wx.showToast({
title:'發佈成功',
})
//返回主頁並刷新
wx.navigateBack()
})
}).catch((err)=>{
wx.hideLoading()
wx.showToast({
title:'發佈失敗',
})
})
通過對數據庫集合的初始化、將數據之間存入數據庫集合中,將需要的數據通過其他事件或者全局變量獲取到。
源碼:GIThub源碼存放