前面有两篇文章中有写过unload上传的方法,可支持拖拽上传文件,图片等等,上传的方法可移步查看
以前上传没有遇见问题,因为客户可能不会频繁的一直去批量导入订单,所以这个问题一直都没有发现。
原因:
总结出一点,主要构成这个问题的原因是我们没有清除文件造成的,无论你是上传成功了,还是上传失败了,不管失败的是什么原因,都是因为没有清除当前 fileList,浏览器还保存着我们第一次上传的文件(无论你是否符合你的要求)
解决方法:
参照网上有说在on-success 文件上传成功时的钩子中清除历史记录,我试过了,仿佛并没有什么反应,那相反on-error 文件上传失败的钩子我也试了,但是对于我来说也没有任何反应,这个东西可能要根据个人项目原因来参照,可能是我这个上传并不适用这个方法。
前面有写过详细的上传方法,详细代码介绍可主页查看,这里我把主要代码贴上:
<el-upload
drag
action="#"
:before-upload="beforeAvatarUpload"
:http-request="uploadImage"
:on-success="handleAvatarSuccess"
:show-file-list="false"
:limit="1"
:accept="accept">
<div style="margin: 0 auto;margin-top: 60px;">
<div class="el-upload__text">将文件拖到此处,或点击打开选择文件导入</div> <div class="upload__type">支持扩展名:.xls .xlsx</div>
</div>
</el-upload>
在这个代码中的自定义方法 :http-request="uploadImage" 中是调用后端接口的,不管是走了成功还是失败,都去清空历史记录 首先在upload组件中加ref="upload" 在.then和.catch中加上this.$refs.upload.clearFiles() 因为前面我说过,不管是成功还是失败,浏览器都保存着我们已经上传的文件,所以这里我们在不管成功还是失败的情况下都加上这段代码
亲测有效,根据个人实际情况来,仅供参考
代码如下:
this.$message.warning('文件正在上传中,请稍后....');
this.$axios.post(this.uploadURL, formData, requestConfig)
.then((res) => {
this.$refs.upload.clearFiles()
this.$message.success(res.data)
this.getList()
this.showUpload = false
this.loading = false
}).catch((res)=>{
// this.$message.error(res.message)
this.$message.error('导入失败,请检查导入文件是否有未填项')
this.$message.error(res.message)
this.$refs.upload.clearFiles()
// this.getList()
// this.showUpload = false
this.loading = false
})