elementui upload限制只能上传一个文件,且覆盖上传

在ElementUI的Upload组件中,通过设置limit为1限制只能上传一个文件,并在onChange事件中更新fileList,实现新上传的文件覆盖旧文件的功能。删除on-exceed事件处理函数,文件变更时只保留最新的文件即可。
摘要由CSDN通过智能技术生成

在使用elementui的Upload 上传组件时,如下代码中使用了limit限定了上传的文件数量,并且做了上传文件数量超限的提示。在上传一个文件后,不删除已上传文件的时候,再次上传文件,会提示超出文件数量限制,并且不会触发onChange事件:

......
<el-upload
    class="demo"
    name="file"
    ref="upload"
    :limit="1"
    :auto-upload="false"
    accept=".xlsx,.xls"
    :action="#"
    :before-upload="beforeUploadFile"
    :on-change="fileChange"
    :on-exceed="exceedFile"
    :file-list="fileList"
    :on-remove="handleRemove"
    >
    <el-button slot="trigger" size="small" type="primary">选择文件</el-button>
    <div class="el-upload__tip" slot="tip">选择批量查询的用户清单文件</div>
</el-upload>
......
 
    // 文件超出个数限制时的钩子
    exceedFile(files, fileList) {
      this.$message.warning(
        `只能选择 ${this.limitNum} 个文件导入,共选择了 ${files.length + fileList.length} 个文件`
      );
    },
    // 文件状态改变时的钩子
    fileChange(file, fileList) {
      this.file = file.raw;
      if (fileList.length > 0) {
        this.fileList = [fileList[fileList.length - 1]]; // 获取最后一次选择的文件
      }
    },
    // 上传文件之前的钩子, 参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传
    beforeUploadFile(file) {
      let extension = file.name.substring(file.name.lastIndexOf(".") + 1);
      if (extension !== "xlsx" || extension !== "xls") {
        this.$message.warning("只能上传后缀是.xlsx、.xls的文件");
      }
    },
    // 文件列表移除文件时的钩子
    handleRemove(file, fileList) {
      this.fileList = [];
    },
   ......

实际项目中想要的效果是:限制只能上传一个文件,并且直接覆盖原来的文件上传。

此时删除 :limit="1"和:on-exceed="exceedFile",

在on-change的fileChange中通过this.fileList = [fileList[fileList.length - 1]];

获取最后一次选择的文件即可。

原文链接:elementui upload限制只能上传一个文件,且覆盖上传_每一天,每一步的博客-CSDN博客

当然可以帮你写一个使用 ElementUI Upload 组件的上传组件。以下是一个简单的示例: 首先,你需要在你的项目中安装并引入 ElementUI: ```bash npm install element-ui ``` ```javascript import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); ``` 接下来,你可以创建一个 Vue 组件来包含你的上传组件: ```vue <template> <div> <el-upload class="upload-demo" action="/your-upload-url" :headers="{'Authorization': 'your-token'}" :on-success="handleSuccess" :on-error="handleError" :before-upload="beforeUpload" > <el-button slot="trigger" size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </div> </template> <script> export default { methods: { beforeUpload(file) { const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'; const isLt500kb = file.size / 1024 < 500; if (!isJPG) { this.$message.error('只能上传jpg/png文件'); } if (!isLt500kb) { this.$message.error('文件大小不能超过500KB'); } return isJPG && isLt500kb; }, handleSuccess(response, file) { // 上传成功后的处理逻辑 console.log(response); }, handleError(error, file) { // 上传失败后的处理逻辑 console.log(error); }, }, }; </script> <style scoped> .upload-demo { display: inline-block; } </style> ``` 在这个示例中,我们使用了 ElementUIUpload 组件,设置了上传的 URL、请求头、文件类型和大小限制,并定义了上传成功和失败的回调函数。 你可以根据你的实际需求修改这个示例,并适配到你的项目中。希望对你有所帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值