element el-upload文件上传覆盖第一个文件的实现

 更新时间:2023年03月28日 16:37:57   作者:小白ming  
这篇文章主要介绍了element el-upload文件上传覆盖第一个文件的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

upload上传是前端开发很常用的一个功能,在Vue开发中常用的Element组件库也提供了非常好用的upload组件

基本用法

先来看官网

<el-upload
  class="upload-demo"
  action="https://jsonplaceholder.typicode.com/posts/"
  accept=".xls, .xlsx"
  :on-preview="handlePreview"
  :on-remove="handleRemove"
  :before-remove="beforeRemove"
  multiple
  :limit="1"
  :on-exceed="handleExceed"
  :file-list="fileList">
  <el-button size="small" type="primary">点击上传</el-button>
  <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>
<script>
  export default {
    data() {
      return {
        fileList: [{name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}, {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}]
      };
    },
    methods: {
      handleRemove(file, fileList) {
        console.log(file, fileList);
      },
      handlePreview(file) {
        console.log(file);
      },
      handleExceed(files, fileList) {
        this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
      },
      beforeRemove(file, fileList) {
        return this.$confirm(`确定移除 ${ file.name }?`);
      }
    }
  }
</script>



官网给出的解释是通过 slot 你可以传入自定义的上传按钮类型和文字提示。

可通过设置limit和on-exceed来限制上传文件的个数和定义超出限制时的行为。

可通过设置before-remove来阻止文件移除操作。

但是在使用过程中 就发现一个很头痛的问题,就是在使用 accept 属性限定了文件上传后缀的时候 ,用户还是可以去进行选择全部文件

然后用户上传了错误文件后,再去上传一个正确文件 虽然用 limit限制了文件的上传个数

在用户点击确定 按钮 的时候,就发现 用户之前上传错误的文件 会进入点击确定的提交事件 upload并不会做一个相应的覆盖处理,还会上传最开始第一个上传的文件,这对用户的体验来说相当不好

再来看看el-upload 属性用法的解释

  • :limit属性来设置最多可以上传的文件数量,超出此数量后选择的文件是不会被上传的
  • :on-exceed绑定的方法则是处理超出数量后的动作
  • 如果需要限制上传文件的格式,需要添加accept属性

在这里插入图片描述

显示已上传文件列表

<el-upload 
    :action="uploadActionUrl"
    accept="image/jpeg,image/gif,image/png"
    multiple
    :limit="1"
    :on-exceed="handleExceed"    
    :on-error="uploadError"
    :on-success="uploadSuccess"
    :on-remove="onRemoveTxt"
    :before-upload="onBeforeUpload"
    :file-list="files">
    <el-button size="small" type="primary">点击上传</el-button>
    <div slot="tip" class="el-upload__tip">请上传图片格式文件</div>
</el-upload>

实现方法就是:file-list="files"这个属性的添加,其中files是绑定的数组对象,初始为空。

效果如下图

在这里插入图片描述

然后发现用 limit限制了文件个数为1 用户再上传文件后并不会对之前的文件进行一个直接的覆盖

:on-exceed 官方解释是 上传文件个数超过限制的时候执行的

如果在这个方法内定义

在这里插入图片描述

它只是在网页上对名字进行了一个改变,在确定上传时会发现之前上传的一个错误文件还会存在于当前的filelist集合中,然后后台就会报错

解决办法

我们可以用  :on-change

on-change: 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用

可以在使用这个钩子方法定义函数,不需要用limit限制文件个数

:on-change=handleChange

      handleChange(file, fileList) {
        this.ebsFileList = fileList;
        this.ebsErrorImport = '';
        if (fileList.length > 1) {
               fileList.splice(0, 1);
               this.$message.error('只能上传一个文件');
           }
      }

可以达到文件覆盖上传的效果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用WebStorm运行vue项目的详细图文教程

    使用WebStorm运行vue项目的详细图文教程

    在WebStorm中怎么打开一个已有的项目,这个不用多说,那么如何运行一个vue项目呢?下面这篇文章主要给大家介绍了关于使用WebStorm运行vue项目的相关资料,需要的朋友可以参考下
    2023-02-02
  • Vue框架中正确引入JS库的方法介绍

    Vue框架中正确引入JS库的方法介绍

    最近在学习使用vue框架,在使用中遇到了一个问题,查找相关资料终于找了正确的姿势,所以这篇文章主要给大家介绍了关于在Vue框架中正确引入JS库的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • 关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)

    关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)

    这篇文章主要介绍了关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性),需要的朋友可以参考下
    2018-09-09
  • vue3 element-plus如何使用icon图标组件

    vue3 element-plus如何使用icon图标组件

    这篇文章主要介绍了vue3 element-plus如何使用icon图标组件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue-cli初始化项目中使用less的方法

    vue-cli初始化项目中使用less的方法

    vue-cli 是 vue.js 的脚手架工具,可以帮助我们编写基础代码、快速搭建开发环境。下面这篇文章主要给大家介绍了关于vue-cli初始化项目中使用less的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起看看吧
    2018-08-08
  • Vuex的使用及知识点笔记

    Vuex的使用及知识点笔记

    这篇文章主要介绍了Vuex的使用及知识点笔记,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 基于javascript的拖拽类封装详解

    基于javascript的拖拽类封装详解

    这篇文章主要介绍了基于javascript的拖拽类封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Vue实现剪切板图片压缩功能

    Vue实现剪切板图片压缩功能

    这篇文章主要介绍了Vue实现剪切板图片压缩功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • vue中深度选择器图文详解

    vue中深度选择器图文详解

    在Vue的开发中,我们经常会用到外部组件库,下面这篇文章主要给大家介绍了关于vue中深度选择器的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • vue弹窗父子组件调用问题示例详解

    vue弹窗父子组件调用问题示例详解

    这篇文章主要介绍了vue弹窗父子组件调用问题,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论