el-upload组件校验不通过预览列表依然显示图片问题解决

如图校验不通过的图片依然显示在预览列表了,需要在校验不通过的时候移除图片
在这里插入图片描述

        <el-upload
            class="upload-cls"
            :action="ossSignature.host"
            :auto-upload="false"
            ref="upload"
            :list-type="listType"
            :limit="limit"
            :on-change="handleChange"
            :on-remove="handleRemove"
            :accept="uploadType"
            :before-upload="beforeUpload"
            :show-file-list="true"
            :file-list="uploadFiles"
        >
            <el-button class="float-l" size="small" type="primary">点击上传</el-button>
            <span>&nbsp;&nbsp;{{ remark }}</span>
        </el-upload>

由于auto-upload = false,校验没办法在beforeUpload事件里添加

最终校验逻辑加在on-change方法里,handleChange方法逻辑如下

        async handleChange(file, fileList) {

            var ext = this.getSuffix(file.name);
            if (this.uploadType.indexOf(ext) < 0) {
                this.handleRemove(file,fileList);
                this.$message.error('仅支持' + this.uploadType + '格式文件');
                return;
            }

            if (this.fileType == 1) {
                var size = file.size / 1024 / 1024;
                if (size > 3) {
                    this.$message.error('图片文件大小仅支持小于3M的图片');
                    this.handleRemove(file,fileList);
                    return;
                }
            }

            if (this.fileType == 2) {
                var size = file.size / 1024 / 1024;
                if (size > 500) {
                    this.$message.error('请上传≤500MB的视频');
                    this.handleRemove(file,fileList);
                    return;
                }
            }
        },
         handleRemove(file, fileList) {
            let index = -1;
            fileList.forEach((e, i) => {
                if (e.uid == file.uid) {
                    index = i;
                }
            });
            if(index >= 0){
                fileList.splice(index, 1);
            }         
        }

主要是利用组件自带的on-change方法,第一个参数file代表当前上传文件,第二个参数就是文件列表对象。实现的主要逻辑就是在类型校验、文件大小限制、视频大小限制不符合的时候,根据uid找到文件index,然后从fileList从移除就好了。

### 文件上传前的大小校验 为了在 `el-upload` 组件中实现文件上传之前的大小校验,可以利用该组件提供的钩子函数 `beforeUpload` 来拦截文件上传过程并执行自定义逻辑。在这个过程中可以通过判断文件对象的 size 属性来决定是否允许继续上传操作[^1]。 下面是一个具体的例子展示如何通过 Vue.js 和 Element UI 的组合使用来进行文件大小验证: ```javascript <template> <div class="upload-demo"> <!-- 使用 :before-upload 进行前置处理 --> <el-upload action="#" :on-preview="handlePreview" :on-remove="handleRemove" :before-upload="checkFileSize" multiple :limit="3" :on-exceed="handleExceed" :file-list="fileList"> <button type="button">点击上传</button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且超过500kb</div> </el-upload> </div> </template> <script> export default { data() { return { fileList: [], // 存储已选中的文件列表 }; }, methods: { handleRemove(file, fileList) {}, handlePreview(file) {}, handleExceed(files, fileList) {}, checkFileSize(rawFile) { const limitSize = 500 * 1024; // 定义最大尺寸为500KB if (rawFile.size > limitSize) { this.$message.error(`文件${ rawFile.name }过大!`); return false; } return true; } } }; </script> ``` 此段代码展示了当用户尝试上传超过指定大小(这里是500 KB)的文件时,程序将会阻止其上传并向用户提供错误提示信息。同时,在模板部分设置了相应的事件处理器用于响应用户的交互行为,比如移除文件、预览文件以及超出数量限制等情况下的反馈机制[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值