微信小程序(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.代码模块

<wxml>

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

<js>

// 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 video string image
sizeType 所选的图片的尺寸, 当acceptimage类型时设置所选图片的尺寸可选值为original compressed string[] ['original','compressed']
preview-size 预览图和上传区域的尺寸,默认单位为px string | number 80px
preview-image 是否在上传完成后展示预览图 boolean true
preview-full-image 是否在点击预览图后展示全屏图片预览 boolean true
multiple 是否开启图片多选,部分安卓机型不支持 boolean false
disabled 是否禁用文件上传 boolean false
show-upload 是否展示文件上传按钮 boolean true
deletable 是否展示删除按钮 boolean true
capture 图片或者视频选取模式,当acceptimage类型时设置capture可选值为camera可以直接调起摄像头 string | string[] ['album', 'camera']
max-size 文件大小限制,单位为byte number -
max-count 文件上传数量限制 number -
upload-text 上传区域文字提示 string -
image-fit 预览图裁剪模式,可选值参考小程序image组件的mode属性 string scaleToFill
use-before-read 是否开启文件读取前事件 boolean -
camera 当 accept 为 video 时生效,可选值为 back front string -
compressed 当 accept 为 video 时生效,是否压缩视频,默认为true boolean -
max-duration 当 accept 为 video 时生效,拍摄视频最长拍摄时间,单位秒 number -
upload-icon 上传区域图标,可选值见 Icon 组件 string plus

accept 的合法值

参数 说明
media 图片和视频
image 图片
video 视频
file 从客户端会话选择图片和视频以外的文件
all 从客户端会话选择所有文件

Event(事件)

事件名 说明 回调参数
bind:before-read 文件读取前,在回调函数中返回 false 可终止文件读取,绑定事件的同时需要将use-before-read属性设置为true event.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: 删除图片的序号值
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容