• 实战|如何使用云开发实现照片附件上传开发


    云开发是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用。

    开发流程

    代码引入

    在当前页面的.json 中引入组件

    {
      "usingComponents": {
        "mp-uploader": "weui-miniprogram/uploader/uploader"
      }
    }
    

    代码开发

    在当前页面.wxml中编写上传组件

    <view class="page__bd">
    
        <mp-cells>
    
          <mp-cell>
    
           <mp-uploader bindfail="uploadError" bindsuccess="uploadSuccess" select="{{selectFile}}" upload="{{uplaodFile}}" files="{{files}}" max-count="4" title="附件上传" tips="最多可上传4张照片"></mp-uploader>
    
          </mp-cell>
    
      </mp-cells>
    
      </view>
    

    bindfail 图片上传失败的事件,detail为{type, errMsg},type为1表示图片超过大小限制,type为2表示选择图片失败,type为3表示图片上传失败。

    bindselect 图片选择触发的事件,detail为{tempFilePaths, tempFiles, contents},其中tempFiles和tempFilePaths是chooseImage返回的字段,contents表示所选的图片的二进制Buffer列表

    max-count 图片上传的个数限制

    在当前页面的.js中编写

    wx.cloud.init({
      env: '环境ID',
      traceUser: true,
    })
     formInputChange(e) {
        const {
          field
        } = e.currentTarget.dataset
        this.setData({
          [`formData.${field}`]: e.detail.value
        })
      },
    chooseImage: function (e) {
        var that = this;
        wx.chooseImage({
            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
            sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
            success: function (res) {
                // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
                that.setData({
                    files: that.data.files.concat(res.tempFilePaths)
                });
            }
        })
    },
    previewImage: function(e){
        wx.previewImage({
            current: e.currentTarget.id, // 当前显示图片的http链接
            urls: this.data.files // 需要预览的图片http链接列表
        })
    },
    selectFile(files) {
        console.log('files', files)
        // 返回false可以阻止某次文件上传
    },
    uplaodFile(files) {
        console.log('upload files', files)
        console.log('upload files', files)
        // 文件上传的函数,返回一个promise
        return new Promise((resolve, reject) => {
          const tempFilePaths = files.tempFilePaths;
          //上传返回值
          const that = this;
          const object = {};
          for (var i = 0; i < tempFilePaths.length; i++) {
            let filePath = '',cloudPath = ''
            filePath = tempFilePaths[i]
            // 上传图片
            // cloudPath 最好按时间 遍历的index来排序,避免文件名重复
            cloudPath = 'blog-title-image-' + new Date().getTime() + '-' + i + filePath.match(/\.[^.]+?$/)[0]
    
            console.log(filePath)
            console.log(cloudPath)
            const upload_task = wx.cloud.uploadFile({
              filePath, 
              cloudPath, 
              success: function(res) {
                console.log(res)
                // 可能会有好几个200+的返回码,表示成功
                if (res.statusCode === 200  || res.statusCode === 204 || res.statusCode === 205) {
                  const url = res.fileID
                  that.data.files.push(url)
                  if (that.data.files.length === tempFilePaths.length) {
                    object.urls = that.data.files;
                    resolve(object)  //这就是判断是不是最后一张已经上传了,用来返回,
                  }
                } else {
                  reject('error')
                }
              },
              fail: function(err) {
                console.log(err)
              }, 
              conplete: () => {
                
              }
            })
          }
        })
        // 文件上传的函数,返回一个promise
    },
    uploadError(e) {
        console.log('upload error', e.detail)
    },
    uploadSuccess(e) {
        console.log('upload success', e.detail)
    }
    });
    

    属性参考文档:https://wechat-miniprogram.github.io/weui/docs/uploader.html

    我们关联云开发之后,我们即可将照片上传到数据库中。

    为方便管理,我们可以创建CMS内容管理器。

    创建CMS内容管理器

    1. 点击云开发->更多->内容管理 进行开通。

      2.云开发为大家准备了基础版,为大家提供了一定的免费额度。

      设置管理员账号以及密码,温馨提示密码请牢记(如果忘记密码可以再内容管理器页面重置密码),设置完成后耐心等待系统初始化。

      3.根据页面中提供的访问地址访问页面登陆后,创建新的项目(这里以花园假期为例)

      4.我们在内容模型中创建照片上传管理(这里模拟情况为仅需要用户上传和记录用户id)

      创建内容模型

      如果需要用户上传多张照片,在设置照片字段时候需要勾选允许用户上传多张照片!

      5.用户上传后我们可以再内容集合,相应模型中查看。

    效果展示

    本文由博客一文多发平台 OpenWrite 发布!

  • 相关阅读:
    wabpack 多页面 react配置 (对比单页面)
    vue-router+nginx非根路径的配置方法
    Vue-Devtools快速安装配置教程
    C++字符串
    NSIS插件制作
    HOOK学习
    排序:数组置顶元素(将数组某个元素排到第一位)
    raect hook中使用防抖(debounce)和节流(throttle)
    浏览器的缓存机制
    JavaScript踩坑解构赋值
  • 原文地址:https://www.cnblogs.com/CloudBase/p/15599760.html
Copyright © 2020-2023  润新知