【微信小程序】图片上传组件“mp-uploader“(weui)

简介: 【微信小程序】图片上传组件“mp-uploader“(weui)

使用示例


  wxml

<mp-uploader 
  files="{{files}}"  
  max-count="{{maximgs}}" 
  max-size="{{10 * 1024 * 1024}}" 
  title="图片上传" 
  tips="最多上传三张图片"
  size-type="{{sizeType}}" 
  sourceType="{{sourceType}}" 
  delete="{{true}}" 
  select="{{selectFile}}" 
  upload="{{uplaodFile}}"
  binddelete="delimg"
  bindfail="uploadError" 
  bindsuccess="uploadSuccess" 
></mp-uploader>

  json

{
  "usingComponents": {
    "mp-toptips": "weui-miniprogram/toptips/toptips",
    "mp-form": "weui-miniprogram/form/form",
    "mp-uploader": "weui-miniprogram/uploader/uploader",
    "mp-checkbox": "weui-miniprogram/checkbox/checkbox",
    "mp-checkbox-group": "weui-miniprogram/checkbox-group/checkbox-group",
    "mp-cells": "weui-miniprogram/cells/cells",
    "mp-cell": "weui-miniprogram/cell/cell"
  }
}

  js

// pages/default/default.js
const app = getApp()
Page({
  data: {
    //mp-uploader
    maximgs:5,//最大上传数
    files: [],  //上传组件绑定的文件urls
    sizeType: ['compressed'], //压缩上传,可以是['original', 'compressed']
    sourceType: ['album', 'camera'], //相册,或拍照
  },
  onLoad: function (options) {
    this.setData({
      //通过bind(this)将函数绑定到this上,以后函数内的this就是指全局页面
      //setdata以后,这两个函数就可以传递给mp-uploader了
      selectFile: this.selectFile.bind(this),  
      uplaodFile: this.uplaodFile.bind(this)
    })
  }, 
  //mpuploader选择图片时的过滤函数,返回true表示图片有效
  selectFile(files) {
    wx.showLoading({ title: '', })
    // 如果有大文件可以压缩一下
    // 返回false可以阻止本次文件上传
  },
  uplaodFile(files) {   
    // 图片上传的函数,必须返回Promise
    //Promise的callback里面必须resolve({urls})表示成功,否则表示失败
    return new Promise((resolve, reject) => {         
      const tempFilePaths = files.tempFilePaths;
      const that = this;
      let finished = {url:[]}  //本次上次成功的URL存入这个变量,被success方法的e.detail承接
      for (var i = 0; i < tempFilePaths.length; i++) {
        let filePath = tempFilePaths[i]  //原名
        let cloudPath = 'qyzj' + new Date().getTime() + '-' + i + filePath.match(/\.[^.]+?$/)[0]  //云存储文件名
        wx.cloud.uploadFile({
          filePath, cloudPath,
          //成功
          success: function (res) {
            if (res.statusCode != 200 && res.statusCode != 204 && res.statusCode != 205) reject('error')// 可能会有好几个200+的返回码,表示成功
            finished.url.push({url:res.fileID})     //成功一个存一个到本次上传成功列表
            //如果本次上传的文件都完成 或全局已经存满3张,resolve退出
            if (finished.urls.length === tempFilePaths.length || that.data.files.length +finished.urls.length == this.data.maximgs)
            resolve(finished)
          },
          //失败
          fail: function (err) { console.log(err) }
        })
      }
    })
  },
  uploadError(e) {
    console.log('upload error', e.detail)
    wx.hideLoading()
    this.setData({ error: "上传失败,可能有些照片过大" })
  },
  uploadSuccess(e) {
    console.log('upload success', e.detail)
    this.data.files=this.data.files.concat(e.detail.url)
    this.setData({files:this.data.files})
    wx.hideLoading()
  },
  //删除图片 detail为{index, item},index表示删除的图片的下标,item为图片对象。
  delimg(e) {
    this.data.files.splice(this.data.files.findIndex(item => item == e.detail.item), 1)
  } 
})

关于weui


  weui是微信官方提供的一款小程序插件,是一套基于样式库weui-wxss开发的小程序扩展组件库,同微信原生视觉体验一致的UI组件库,由微信官方设计团队和小程序团队设计。官方文档:https://wechat-miniprogram.github.io/weui/docs/

  图片上传组件mp-uploader的属性:

属性 类型 默认值 必填 说明
ext-class string 添加在组件内部结构的class,可用于修改组件内部的样式
title string 图片上传 组件标题
tips string 组件的提示
delete boolean 是否显示删除按钮
size-type array 和chooseImage的sizeType参数一样
source-type array 和chooseImage的sourceType参数一样
max-size number 5 * 1024 * 1024 图片上传的最大文件限制,默认是5M
max-count number 1 图片上传的个数限制
files array 当前的图片列表
select function 选择图片时的过滤函数,返回true表示图片有效
upload function 图片上传的函数,返回Promise,Promise的callback里面必须resolve({urls})表示成功,否则表示失败
bindcancel eventhandler 取消图片选择的事件,detail为{}
bindsuccess eventhandler 图片上传成功的事件,detail为{urls},urls为upload函数上传成功返回的urls参数
bindfail eventhandler 图片上传失败的事件,detail为{type, errMsg},type为1表示图片超过大小限制,type为2表示选择图片失败,type为3表示图片上传失败。
binddelete eventhandler 删除图片触发的事件,detail为{index, item},index表示删除的图片的下标,item为图片对象。


相关文章
|
6月前
|
人工智能 小程序 前端开发
【一步步开发AI运动小程序】十九、运动识别中如何解析RGBA帧图片?
本文介绍了如何将相机抽取的RGBA帧图像解析为`.jpg`或`.png`格式,适用于体测、赛事等场景。首先讲解了RGBA图像结构,其为一维数组,每四个元素表示一个像素的颜色与透明度值。接着通过`uni.createOffscreenCanvas()`创建离屏画布以减少绘制干扰,并提供代码实现,将RGBA数据逐像素绘制到画布上生成图片。最后说明了为何不直接使用拍照API及图像转换的调用频率建议,强调应先暂存帧数据,运动结束后再进行转换和上传,以优化性能。
|
8月前
|
人工智能 自然语言处理
使用企业微信或公众号自动回复图片消息
AppFlow支持企业微信和公众号接收图片消息,并提供两种回复方式。方式一:直接回复图片消息,用户发送图片后立即收到回复,但无法继续追问。方式二:先保存图片,待用户发送文字后再一并处理并回复。配置步骤包括选择模板、配置鉴权信息、设置执行动作参数及发布连接流。详细操作可参考相关文档。
696 1
使用企业微信或公众号自动回复图片消息
|
11月前
|
小程序 数据可视化 JavaScript
微信小程序:轻松实现时间轴组件
本文介绍了如何在微信小程序中实现一个可视化时间轴组件。该组件适用于展示用户资金流动、投资结算等时间节点,帮助用户直观了解资金去向。时间轴支持自定义节点形状、显示序号、倒序排列等功能,并通过插槽灵活定义动态内容。文中详细介绍了组件的设计与使用方法,以及如何结合动态 slot 实现自定义操作。该组件为展示用户资金信息提供了美观、易用的解决方案。
368 1
微信小程序:轻松实现时间轴组件
|
10月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
193 0
在线课堂+工具组件小程序uniapp移动端源码
|
11月前
|
小程序
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
1868 1
|
11月前
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
441 0
微信小程序:自定义关注公众号组件样式
|
11月前
|
小程序 前端开发 JavaScript
微信小程序图表制作利器:ECharts组件的使用与技巧
微信小程序图表制作利器:ECharts组件的使用与技巧
864 1
|
11月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
738 1
|
11月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
2723 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
7月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。

热门文章

最新文章