iview批量上传on-success只触发一次

在使用iview进行批量文件上传时遇到问题,虽然before-upload多次触发,但on-success只触发一次,导致只能显示第一个上传文件。进一步排查发现,uploadVue.post中的uploadVue.clearFiles()在多选时影响了上传,通过设置变量避免多选时执行此清除操作,解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如下面代码,多选时,多个文件只显示了第一个上传的。before-upload 会触发多次,但是on-success只触发了一次。上传完成的打印也有多次的。证明多个文件已经上传成功了

 <Upload
                ref="upload"
                type="drag"
                :show-upload-list="showUploadList"
                :format="format"
                multiple
                :before-upload="onBeforeUpload"
                :on-success="onSuccessHandler"
                :on-error="onErrorHandler"
                :max-size="maxSize"
                action="/">
           <div v-for="item in fileList">xxxx</div>
        </Upload>
onBeforeUpload(file) {
	//xxxxxxxxx 处理逻辑;
	return beforeCosUpload(this, file, beforeCheck)
}

onSuccessHandler(response, file) {
        console.info('上传成功', response, file)
        this.fileList.push( {
        	// xxxxxxxxx
        })
      },
      
function beforeCosUpload(self, file, beforeCheck) {
  let uploadVue = self.$refs.upload
  uploadVue.post = function (file) {
     uploadVue.clearFiles() 
    uploadVue.handleStart(file)
    // xxxxxxxxxxxxx
      onProgress(progressData) {
        progressData.percent = progressData.percent * 100
        uploadVue.handleProgress(progressData, file)
      },
      onSuccess(data) {
        // console.info('上传完成`', data) // 在此处有都会触发多次
        uploadVue.handleSuccess(data, file)
      },
      onError(err, data) {
      }
    }

    let result = cosUpload(obj)
  }
  return new Promise((resolve, reject) => {
   // xxxxxxxxxx
  })
  }

最后发现是在后面 uploadVue.post 里面的uploadVue.clearFiles() 影响到了。所以处理一下,加个变量,多选时不去执行清除设置 uploadVue.clearFiles()

return beforeCosUpload(this, file, beforeCheck,false)

function beforeCosUpload(self, file, beforeCheck,isClear = true) {
  uploadVue.post = function (file) {
    if (isClear) {
      uploadVue.clearFiles()  
    }
  }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值