unicloud32-上传成功的回调url存储到数据库

85 阅读1分钟

获取url--也就是在云存储中点击详情就能复制到的那个url,要把他存到数据库中才能通过代码操作,否则只能手动复制

下载地址这里就是url image.png

现在先把demo改成自动上传 之前在上传成功回调方法里没有打印参数,把这个方法的参数打印出来,实际就有url

<template>
  <view class="home">
    <uni-file-picker
    	v-model="imageValue"
    	mode="grid"
    	limit="3"
    	@progress="progress"
    	@success="success"
    	@fail="fail"
    	@select="select"
      ref="files"
    />
  </view>
</template>

<script>
  export default {
    data() {
      return {
        // 这是一个在组件中写好的双向绑定的变量
        imageValue: []
      }
    },
    onLoad() {

    },
    methods: {
      // 获取上传状态
      select(e) {
        console.log('选择文件:', e)
      },
      // 获取上传进度
      progress(e) {
        console.log('上传进度:', e)
      },

      // 上传成功
      success(e) {
        console.log('上传成功',e)
      },

      // 上传失败
      fail(e) {
        console.log('上传失败:', e)
      }
    }
  }
</script>

<style lang="scss" scoped;>
</style>

在页面中上传一张图,上传成功回调函数里的tempFilePaths参数里就是url image.png

mp-434fcb27-c15c-4386-8fb4-df14ff635e79.cdn.bspapp.com/cloudstorag…

另一个属性tempFiles包含更完整的内容,size是文件大小 image.png

拿到url把他存到刷剧数据中,在渲染数据时就可以使用了 mp-434fcb27-c15c-4386-8fb4-df14ff635e79.cdn.bspapp.com/cloudstorag…

在数据库中创建一个数据表picdata 接下来在页面的data中定义一个变量fileUrl保存数据

然后新建一个输入框获取用户输入的标题,保存在data中,新建变量title 一个提交按钮,当用户点击按钮后,将标题和上传文件一起保存到数据库

<template>
  <view class="home">
    <input type="text" v-model="title" placeholder="请输入标题"></input>
    <uni-file-picker
    	v-model="imageValue"
    	mode="grid"
    	@progress="progress"
    	@success="success"
    	@fail="fail"
    	@select="select"
      ref="files"
    />
    <button @click="onSubmit" type="primary">确认发布</button>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        title:"",
        // 保存上传到云存储的url
        filesUrl:[],
        // 这是一个在组件中写好的双向绑定的变量
        imageValue: []
      }
    },
    onLoad() {

    },
    methods: {
      // 获取上传状态
      select(e) {
        console.log('选择文件:', e)
      },
      // 获取上传进度
      progress(e) {
        console.log('上传进度:', e)
      },

      // 上传成功
      success(e) {
        console.log('上传成功',e)
        this.filesUrl = e.tempFilePaths
      },

      // 上传失败
      fail(e) {
        console.log('上传失败:', e)
      }
    }
  }
</script>

创建云函数

要把数据保存到云数据库,就先创建云函数demo2_art_add_row

const db=uniCloud.database()
exports.main = async (event, context) => {
  let {title, filesUrl} = event
	return await db.collection("picdata").add({
    title,
    filesUrl
  })
};


云函数创建完成后,就是在前端页面的按钮点击事件调用云函数,传递参数给云函数并获取返回值

<template>
  <view class="home">
    <input type="text" v-model="title" placeholder="请输入标题"></input>
    <uni-file-picker
    	v-model="imageValue"
    	mode="grid"
    	@progress="progress"
    	@success="success"
    	@fail="fail"
    	@select="select"
      ref="files"
    />
    <button @click="onSubmit" type="primary">确认发布</button>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        title:"",
        // 保存上传到云存储的url
        filesUrl:[],
        // 这是一个在组件中写好的双向绑定的变量
        imageValue: []
      }
    },
    onLoad() {

    },
    methods: {
      //点击发布
      onSubmit(){
        uniCloud.callFunction({
          name:"demo2_art_add_row",
          data:{
            title: this.title,
            filesUrl: this.filesUrl
          }
        }).then(res=>{
          console.log(res);
        })
      },
      // 获取上传状态
      select(e) {
        console.log('选择文件:', e)
      },
      // 获取上传进度
      progress(e) {
        console.log('上传进度:', e)
      },

      // 上传成功
      success(e) {
        console.log('上传成功',e)
        this.filesUrl = e.tempFilePaths
      },

      // 上传失败
      fail(e) {
        console.log('上传失败:', e)
      }
    }
  }
</script>

<style lang="scss" scoped>
</style>

数据库中已经有这个图片的地址和用户输入的title了。

image.png

控制台中返回值是数据库返回的id