问题
使用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
})
},