微信小程序开发:使用vant的Uploader组件实现上传图片功能

2020-04-2421:11:19APP与小程序开发Comments3,531 views字数 2195阅读模式

使用vant的Uploader组件

我们使用上传的组件是vant-weapp,这样可以大大的提高我们的开发效率。使用Uploader组件首先在全局配置app.js引入该组件,也可以在页面配置json中引入文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

"usingComponents": {
    "van-uploader": "/path/to/vant/uploader/index",
 },
复制代码

新建uploader相关page,在uploade.wxml增加我们的上传组件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

<view class="uploader">
    <van-uploader file-list="{{ fileList }}" bind:after-read="afterRead" bind:delete="deleteImg" multiple="{{true}}" />
</view>
复制代码

file-list绑定的是上传的文件列表,bind:after-read绑定图片读取后的事件,bind:delete绑定删除图片事件,multiple是否支持多上传功能,默认为false,我们还需要在uploade.js增加相关的逻辑文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

上传地址配置

配置上传的初始化值文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

 /**
   * 页面的初始数据
   */
  data: {
    fileList: [] //需要上传的图片列表
  },
复制代码

新建项目配置文件config/index.js文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

export default {
  uploadUrl: `***************` //你的上传到服务器地址
}
复制代码

在使用的页面中导入配置文件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

import config from 'path/to/config/index' //相对路径
复制代码

封装上传图片函数

为每上传一张图片返回promise任务,这里建议封装写在behaviors行为里面,因为一般在项目中我们会很多地方使用到该函数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

  /**
   * @param {string} uploadFile 需要上传的文件
   * @description 上传到指定服务器
   * @return {Promise} 上传图片的promise 
   */
  uploadFile(uploadFile) {
    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: config.uploadUrl, // 上传的服务器接口地址
        filePath: uploadFile, 
        name: 'file', //上传的所需字段,后端提供
        success: (res) => {
          // 上传完成操作
          const data = JSON.parse(res.data)
          const url = data.data.url  
          resolve({
            url: url
          })
        },
        fail: (err) => {
          //上传失败:修改pedding为reject
          reject(err)
        }
      });
    })
  },
/
复制代码

实现上传操作函数

编写上传图片后的操作函数,可以为每一张上传的图片作为一次promise任务,等待全部的promise执行完毕才上传成功,否则失败文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

/**
   * @param {object} event event.detail.file: 当前读取的文件
   * @description 上传图片后操作
   */
  afterRead(event) {
    wx.showLoading({
      title: '上传中...'
    })
    const { file } = event.detail //获取所需要上传的文件列表
    let uploadPromiseTask = [] //定义上传的promise任务栈
    for (let i = 0;i < file.length;i++) {
      uploadPromiseTask.push(this.uploadFile(file[i].path)) //push进每一张所需要的上传的图片promise栈
    }
    Promise.all(uploadPromiseTask).then(res => {
      //全部上传完毕
      this.setData({
        fileList: this.data.fileList.concat(res)
      })
      wx.hideLoading()
    }).catch(error => {
      //存在有上传失败的文件
      wx.hideLoading()
      wx.showToast({
        title: '上传失败!',
        icon: 'none',
      })
    })
  }
复制代码

删除图片操作函数

绑定相对应的删除图片事件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

/**
   * @param {object} event event.detail.index: 删除图片的序号值
   * @description 删除已上传的图片
   */
  deleteImg(event) {
    const delIndex = event.detail.index
    const { fileList } = this.data
    fileList.splice(delIndex, 1)
    this.setData({
      fileList
    })
  }
复制代码

预览已上传的图片

preview-image设置为true即可预览图片,更多van-uploader可查阅官方文档文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

<van-uploader file-list="{{ fileList }}" bind:after-read="afterRead" bind:delete="deleteI

作者:肥仔快乐水
链接:https://juejin.im/post/5e843c3d5188257397285db1
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/18357.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/xcx/18357.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定