小程序中van-uploader组件加wx.uploadFile多文件上传

本文详细描述了如何在微信小程序中使用van-uploader组件进行图片的多图上传,包括事件处理和文件处理逻辑,展示了WXML和JS代码片段。
摘要由CSDN通过智能技术生成

wxml:

<van-uploader  file-list="{{photo[child.key]}}" bind:after-read="afteruploadPhotoRead" data-name="{{child.key}}" use-before-read bind:before-read="beforeRead" bind:delete="deleteImg" data-type="{{child.key}}" preview-size="150rpx" preview-image preview-full-image max-count="{{child.num}}" multiple sizeType="compressed" isChoseType="{{true}}"></van-uploader>

JS:

afteruploadPhotoRead(e) {    
    const fileArr = e.detail.file.map(item=>item.url);//图片集 
    wx.showLoading({
      title: '上传中',
    })
    var that = this
    const uploadMultiple = (index) => {
      if (index >= fileArr.length) {
        // 所有文件上传完毕
        wx.showToast({
          title: '上传完成',
          icon: 'success',
          duration: 2000
        });
        return;
      }      
      const filePath = fileArr[index];
      wx.uploadFile({
        url: API_BASE_URL + 'common/weChat/uploadImage', // 你的上传API地址
        filePath: filePath,
        name: 'file', // 这里根据API的要求来定义    
        complete: function (res) {
          wx.hideLoading()
          if (res.statusCode == 200) {
            wx.showToast({
              title: '选择成功',
              icon: 'none',
            })
            var item = {
              url: "",
              name: "",
            }
            let type = e.currentTarget.dataset.type
            item.url = filePath;
            item.name = res.data;
            that.data.photo[type].push(item) 
            that.setData({
              [`photo.${type}`]: that.data.photo[type]
            })
            that.checkCompleteEnable()
          } else {
            wx.showToast({
              title: '选择失败',
              icon: 'error'
            })
          }
          uploadMultiple(index + 1);
        } 
      });
    };
    uploadMultiple(0); //执行上传
  },

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要获取视频封面,可以使用小程序wx.createVideoContext 方法创建一个 video 上下文对象,然后调用它的 canvas 绘制方法将视频封面绘制到一个 canvas 上,最后将 canvas 转换成图片即可。 具体步骤如下: 1. 在页面上使用 van-uploader 组件上传视频,并获取到视频的临时文件路径。 2. 使用 wx.createVideoContext 方法创建一个 video 上下文对象。 ```javascript const videoContext = wx.createVideoContext('myVideo') ``` 3. 在 van-uploaderupload-success 事件回调,设置视频的 src 属性,让视频开始播放。 ```html <van-uploader ... @upload-success="onUploadSuccess" /> <video id="myVideo" src="{{ videoSrc }}"></video> ``` ```javascript onUploadSuccess(event) { this.videoSrc = event.detail.url this.$nextTick(() => { const videoContext = wx.createVideoContext('myVideo') videoContext.play() }) }, ``` 4. 在视频播放完毕后,在 video 的 ended 事件回调,使用 videoContext.drawImage 将视频封面绘制到 canvas 上。 ```html <van-uploader ... @upload-success="onUploadSuccess" /> <video id="myVideo" src="{{ videoSrc }}" bindended="onVideoEnded" ></video> <canvas id="myCanvas"></canvas> ``` ```javascript onVideoEnded() { const videoContext = wx.createVideoContext('myVideo') const canvasContext = wx.createCanvasContext('myCanvas') canvasContext.drawImage(videoContext, 0, 0, 300, 150) canvasContext.draw(false, () => { wx.canvasToTempFilePath({ canvasId: 'myCanvas', success: (res) => { console.log(res.tempFilePath) } }) }) }, ``` 5. 最后,将 canvas 转换成图片路径,即可得到视频封面的临时文件路径。 注意:由于小程序的安全限制,canvas 只能绘制来自本地和网络的图片,不能直接从 video 上下文对象绘制视频帧。因此,需要将视频封面绘制到一个 canvas 上,再将 canvas 转换成图片。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值