云函数中进行初始化操作
const cloud = require('wx-server-sdk')
const fs = require('fs')
const path = require('path') 支持nodejs模块进行文件操作
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
const fileStream = fs.createReadStream(path.join(__dirname, 'demo.jpg'))
return await cloud.uploadFile({
cloudPath: 'demo.jpg',
fileContent: fileStream,
})
}
小程序中进行云存储等操作:
云存储
如图片:
回调函数中的this执向不同
let that =this;
wx.chooseImage({
success:function(res){
wx.cloud.uploadFile({
cloudPath:xx+'.png', 上传到云服务器的id
filePath:res.tempFilePaths[0], 文件临时路径,如上一个chooseImage的成功回调函数返回结果中的文件暂时路径
success:function(res){
res.fileID;获取上传文件的id,可直接使用
})
},
fail:function(){xxx}
})
当无success、fail和complete其中一个时,会返回Promise
云下载:
wx.cloud.downloadFile({
fileID:'云存储返回的fileID',
success(res)
{
res.tempFilePath; 返回文件地址
}
})
当无success、fail和complete其中一个时,会返回Promise
云删除:
wx.cloud.deleteFile({
fileList:['fileID'],
success(res)
{
console.log(res.fileList);
}
})
当无success、fail和complete其中一个时,会返回Promise
云临时链接:
可以根据文件ID换取临时文件网络链接,公有读的文件获取的链接不会过期,私有的文件获取的链接十分钟有效期。一次最多取 50 个
wx.cloud.getTempFileURL({
fileList: [{
fileID: 'fileID',
maxAge: 60 * 60, 链接有效时间
}],
success: res => {
console.log(res.fileList)
},
fail: err => {
}
})
当无success、fail和complete其中一个时,会返回Promise
组件支持直接传入云文件ID:
组件 属性
image src
video src、poster
cover-image src
接口支持直接传入云文件ID:
接口 参数
getBackgroundAudioManager src
createInnerAudioContext src
previewImage urls、current
代码示例:
uploadEvent(){
let that=this;
wx.chooseImage({
success: function(res) {
console.log(res);
//将选中的图片上传到云服务器
wx.cloud.uploadFile({
//上传到云服务器的id
cloudPath:new Date().getTime()+'.png',
//上一个chooseImage的成功回调函数返回结果中的文件暂时路径
filePath:res.tempFilePaths[0],
success:function(res2){
console.log(res2);
let arr=that.data.imgSrc;
arr.push(res2.fileID);
that.setData({
imgSrc: arr
});
}
})
},
fail:function(res)
{
console.log('error');
}
})
}
})
Taro代码示例:
import Taro from '@tarojs/taro'
import { View,Text,Button,Image} from '@tarojs/components'
import React,{ Component} from 'react'
import { add } from '../../utils/db/index'
class Game extends Component{
state={
imgs:[],
cloudImgs:[],
fileID:''
}
componentDidMount()
{
Taro.cloud.init({
env: 'jeff-ssr'
})
}
click=()=>{
Taro.cloud.callFunction({
name: 'add',
//传入的数据
data: {
a: 1,
b: 10,
},
//成功回调,参数为云函数中的返回内容
success:function(res)
{
console.log(res);
},
fail()
{
console.log('err')
}
})
}
_add=async ()=>{
let res = await add(
{ name:'复仇者联盟',img:'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3659875041,1653589983&fm=26&gp=0.jpg'},
// {name:'蜘蛛侠',img:'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2665014954,1139410527&fm=26&gp=0.jpg'},
// {name:'雷神',img:'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1747873458,3198507694&fm=26&gp=0.jpg'},
// {name:'钢铁侠',img:'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3179099924,1007440925&fm=26&gp=0.jpg'},
// {name:'美国队长',img:'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=3035539664,2279765935&fm=26&gp=0.jpg'},
)
}
_chooseImage()
{
let that=this;
Taro.chooseImage({
count:2,
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera','user','environment'], // 可以指定来源是相册还是相机,默认二者都有,在H5浏览器端支持使用 `user` 和 `environment`分别指定为前后摄像头
success: function (res) {
// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
var tempFilePaths = res.tempFilePaths;
that.setState({
imgs:tempFilePaths
})
}
})
}
_cloudSave=(e,imgPath)=>
{
let that=this;
console.log(imgPath);
Taro.cloud.uploadFile({
cloudPath:new Date().getTime()+'.jpg',
filePath:imgPath,
success:(res)=>
{
console.log('ww')
that.setState({
fileID:res.fileID
})
},
fail()
{
console.log('ddd');
}
})
}
_cloudDown=()=>{
let that=this;
Taro.cloud.downloadFile({
fileID:that.state.fileID,
success(res)
{
let cloudImgs=that.state.cloudImgs;
cloudImgs.push(res.tempFilePath);
that.setState({
cloudImgs
})
}
})
}
_cloudDelete=()=>{
Taro.cloud.deleteFile({
fileList:['fileID'],
success(res)
{
console.log(res.fileList);
}
})
}
render()
{
const { imgs,cloudImgs}=this.state
return(
<View>
<Text>game</Text>
<Button onClick={ this.click}>测试云函数</Button>
<Button onClick={ this._add}>添加云数据库</Button>
<Button onClick={ this._chooseImage.bind(this)}>调用本地相册</Button>
<Button onClick={ (e)=>{ this._cloudSave(e,imgs[0])}}>调用云存储</Button>
<Button onClick={ this._cloudDown}>调用云下载</Button>
<Button onClick={ this._cloudDelete}>调用云删除</Button>
{
cloudImgs.map((item,index)=>{
return(
<Image src={ item}/>
)
})
}
</View>
)
}
}
export default Game