input type=file 同一个文件两次上传,第二次无效

问题

使用input[type=file] 实现文件上传功能,通过onchange事件触发js代码,这个时候第一次上传是完全没问题的,当你第二次上传文件时,如果是不同于上一次上传文件的话是可以正常上传的,不过如果你选择的还是上一个文件,也就是两次上传的文件重复了,那么就会上传失败。

原因

input是通过onchange事件来触发js代码的,由于两次文件是重复的,所以这个时候onchange事件是没有触发到的。

最佳解决方案

读取文件后,记得把input的value重新设置为空即e.target.value=‘’

应用场景

<div class="upload-btn">
   <input type="file" ref="file" id="file" @change="getAvatarFile" accept="image/png, image/jpeg, image/jpg">
   <label for="file" class="upload-avatarShow-btn vc block cur-p">
     <i class="cs-add-out"></i>
      点击上传
   </label>
</div>


getAvatarFile (e) {
   let file = e.target.files[0]
   if(!file) return
   this.isThan(e, file, 5, 'qualifyCertImg')
   e.target.value = ''
},
isThan (e, file, num, type){
   const isLtSize = file.size / 1024 / 1024 < num
   if (!isLtSize) {
      this.$message({
        message: `图片大小不可超过 ${num}MB!`,
        type: 'error'
      })
      return false
   }
   let _this = this
   getFile(e, result => {
      if(type) _this.enterprise[type] = result
      else _this.orgAvatarFile = file
    })
},
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值