微信小程序(wepy + vant = 文件上传 van-uploader)

场景说明

微信小程序 - 进行图片上传(图片多选、图片放大预览)

官网详解:https://vant-contrib.gitee.io/vant-weapp/#/uploader

1.组件引入

<config>
{
  navigationBarTitleText: 'xxxx',
  usingComponents: {
    "van-uploader": "module:@vant/weapp/dist/uploader",
  }
}
</config>

2.代码模块

<van-uploader
  preview-size="72"
  multiple
  data-idx="{{index}}" 							// 传入绑定的值,业务需要
  file-list="{{ item.fileList }}" 	// 选中图片文件数组
  max-count="9" 										// 可选图片最大数量
  bind:after-read="afterRead"				// 图片选择回调
  bind:delete="deleteClick"					// 图片删除事件
/>
// data
data: {
  stairs_Items: [], // 图片数组
},

// 图片选择回调
afterRead(event) {
  let that = this;
  wx.showLoading({
    title: '上传中...'
  });
  const { file } = event.$wx.detail;
  let uploadPromiseTask = [];
  for (let i = 0; i < file.length; i++) {
    uploadPromiseTask.push(this.uploadFile(file[i].url));
  }
  Promise.all(uploadPromiseTask)
    .then(res => {
      that.stairs_Items[
        event.$wx.currentTarget.dataset.idx
      ].fileList = that.stairs_Items[
        event.$wx.currentTarget.dataset.idx
      ].fileList.concat(res);
      wx.hideLoading();
    })
    .catch(error => {
      wx.hideLoading();
      wx.showToast({
        title: '上传失败!',
        icon: 'none'
      });
    });
},
      
// 删除指定位置图片
deleteClick(event) {
  if (this.stairs_Items) {
    const { index } = event.$wx.detail;
    this.stairs_Items[event.$wx.currentTarget.dataset.idx].fileList.splice(
      index,
      1
    );
  }
},
 
// 图片上传
uploadFile(uploadFile) {
  return new Promise((resolve, reject) => {
    wx.uploadFile({
      url: utils.imageUri + 'resource/resources/upload',
      filePath: uploadFile,
      name: 'file',
      success: res => {
        //  上传完成
        const data = JSON.parse(res.data);
        const fileUrl = utils.imageUri + data.data.fileUrl;
        resolve({ url: fileUrl });
      },
      fail: err => {
        reject(err);
      }
    });
  });
},

Props(参数)

参数说明类型默认值
name标识符,可以在回调函数的第二项参数中获取string | number-
accept接受的文件类型, 可选值为all media image file videostringimage
sizeType所选的图片的尺寸, 当acceptimage类型时设置所选图片的尺寸可选值为original compressedstring[]['original','compressed']
preview-size预览图和上传区域的尺寸,默认单位为pxstring | number80px
preview-image是否在上传完成后展示预览图booleantrue
preview-full-image是否在点击预览图后展示全屏图片预览booleantrue
multiple是否开启图片多选,部分安卓机型不支持booleanfalse
disabled是否禁用文件上传booleanfalse
show-upload是否展示文件上传按钮booleantrue
deletable是否展示删除按钮booleantrue
capture图片或者视频选取模式,当acceptimage类型时设置capture可选值为camera可以直接调起摄像头string | string[]['album', 'camera']
max-size文件大小限制,单位为bytenumber-
max-count文件上传数量限制number-
upload-text上传区域文字提示string-
image-fit预览图裁剪模式,可选值参考小程序image组件的mode属性stringscaleToFill
use-before-read是否开启文件读取前事件boolean-
camera当 accept 为 video 时生效,可选值为 back frontstring-
compressed当 accept 为 video 时生效,是否压缩视频,默认为trueboolean-
max-duration当 accept 为 video 时生效,拍摄视频最长拍摄时间,单位秒number-
upload-icon上传区域图标,可选值见 Icon 组件stringplus
accept 的合法值
参数说明
media图片和视频
image图片
video视频
file从客户端会话选择图片和视频以外的文件
all从客户端会话选择所有文件

Event(事件)

事件名说明回调参数
bind:before-read文件读取前,在回调函数中返回 false 可终止文件读取,绑定事件的同时需要将use-before-read属性设置为trueevent.detail.file: 当前读取的文件,event.detail.callback: 回调函数,调用callback(false)终止文件读取
bind:after-read文件读取完成后event.detail.file: 当前读取的文件
bind:oversize文件超出大小限制-
bind:click-preview点击预览图片event.detail.index: 点击图片的序号值
bind:delete删除图片event.detail.index: 删除图片的序号值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值