Element-ui upload组件上传一次后,不论成功还是失败无法上传第二次的问题

882 阅读1分钟

前面有两篇文章中有写过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
        })