el-upload批量上传

el-upload批量上传

最近在处理 el-upload 上传图片,上传单张图片成功时直接在on-success里面进行 push ,图片成功展示。

但在进行批量上传的时候 在on-success里面进行 push ,图片只能 push 第一张进去。

因为在 on-success 只会对 status = ‘success’ 图片进行处理,在执行第一张图片时候,其他的图片状态还是 uplaoding。然后对 fileList 进行了 push 操作,后面图片的 on-success 就不会执行了。

所以 批量上传 时需要对 fileList 进行处理,需要等所有图片都成功时再进行push操作。

由于 on-success 第三个参数 fileList 会展示所有的图片,即在给 el-upload 设置了默认图片也会展示,push时会出现异常,所以可以根据 图片上传接口 响应出参进行特殊处理。

<el-upload
  multiple
  list-type="picture-card"
  :headers="headers"
  :data="dataObj"
  :action="action"
  :file-list="fileList"
  :limit="20"
  :before-upload="beforeUpload"
  :on-success="handleImageSuccess"
  :on-preview="handlePictureCardPreview"
  :on-remove="handleRemove"
  :on-exceed="handleExceed"
>
</el-upload>

beforeUpload(file) {
 const _self = this
  const _URL = window.URL || window.webkitURL
  return new Promise(resolve => {
    const img = new Image()
    img.src = _URL.createObjectURL(file)
    img.onload = function() {
      _self.fileList.push({
        hasSuccess: false,
        uid: file.uid,
        width: this.width,
        height: this.height
      })
    }
    resolve(true)
  })
},

// 所以 批量上传 时需要对 fileList 进行处理,需要等所有图片都成功时再进行push操作。
handleImageSuccess(response, file, fileList) {
  if (fileList.every(v => v.status === 'success')) {
    fileList.forEach(item => {
      const index = this.fileList.findIndex(img => img.uid === item.uid)
      // 由于 on-success 第三个参数 fileList 会展示所有的图片,即在给 el-upload 设置了默认图片也会展示,push时会出现异常,所以可以根据 图片上传接口 响应出参进行特殊处理。
      if (item.response && index >= 0) {
        this.fileList[index].name = item.name
        this.fileList[index].url= item.response.data.url
      }
    })
    // 当图片上传不成功时,可以进行 强制渲染(慎用)
    // this.$forceUpdate()
  }
},
// 移除图片
handleRemove(file) {
  const { imgPath } = file
  this.fileList = this.fileList.filter(item => {
    return item.url!== url
  })
},

handlePictureCardPreview(file) {
  this.dialogImageUrl = file.url
  this.dialogVisible = true
},

handleExceed(files, fileList) {
  this.$message.warning(`最多上传20张商品图片。`);
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值