vue+element之解决upload组件上传文件失败后仍显示在列表上、自动上传、过滤、findIndex、splice、filter

news/2024/10/20 17:37:02/
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

MENU

  • 前言
  • 错误案例(没有用)
  • 正确方法
  • 结束语


前言

el-upload上传失败后,文件仍显示在列表上。
upload.png
这个pdf文件上传失败,仍显示在列表,给人错觉是上传成功,所以要把它去掉。


在element中,file-listv-model:file-list是用于上传文件组件的两个不同属性。
1、file-list属性用于显示已上传文件列表,可以通过设置file-list属性为一个数组。数组中包含已上传文件的信息,例如文件名、大小等,element会根据这个数组来展示已上传文件列表。
2、v-model:file-list用于绑定已上传文件的双向绑定属性,通过将v-model:file-list绑定到一个变量上,可以实现上传文件的双向绑定,即当用户上传文件时,绑定的变量会更新,反之亦然。属性通常用于需要在上传文件后对文件进行处理或者在上传前对文件进行验证的场景。
file-list用于显示已上传文件列表
v-model:file-list用于实现上传文件的双向绑定。


错误案例(没有用)

前言

这是网上其他博主写的博客,并没有解决问题,还报错了。


html

<el-uploadclass="upload-file padding"ref="uploadFile"multipleaccept="image/jpeg,image/png,image/gif,application/pdf":http-request="uploadFile":on-change="onChange":before-upload="beforeuploadFile"action="123":disabled="!isDisabled":on-remove="handleRemove":file-list="ruleForm.commission"><el-button type="primary" size="mini" :loading="uploadLoding" :disabled="!isDisabled">上传</el-button><div slot="tip" class="el-upload__tip" style="line-height: 1; margin: 0 0 10px;">注:只能上传图片或pdf文件</div>
</el-upload>

JavaScript

handleRemove (file, fileList) {this.ruleForm.commission = fileList// 用于校验// this.ruleForm.fileName = ''
},
onChange (file, fileList) {this.files = fileList
},
// 上传
uploadFile (fileObj) {let file = fileObj.fileuploadImageInfo({ file: file, width: 165, height: 245, caseId: this.caseId, taskId: this.taskId }).then(res => {if (res.success && res.data) {// 后端接口返回后逻辑-todoconst obj = {// 文件名带后缀name: '文件名.pdf',// 文件路径url: data.path,}// 显示用的this.ruleForm.commission.push(obj)}}).catch(err => {console.log(err)// 关键作用代码,去除文件列表失败文件let uid = file.uid// 关键作用代码,去除文件列表失败文件(uploadFiles为el-upload中的ref值)let idx = this.$refs.uploadFile.uploadFiles.findIndex(item => item.uid === uid)// 关键作用代码,去除文件列表失败文件this.$refs.uploadFile.uploadFiles.splice(idx, 1)})
}

正确方法

html

<el-upload v-model:file-list="form.fileList" accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf"action="/api/upload/file" :show-file-list="true" :on-progress="uploadProgress":on-preview="fileViewV" :on-success="successFileFolder" :on-error="uploadError"><el-button type="success" size="small">上传</el-button>
</el-upload>

JavaScript

fileViewV(file) {window.open(file.response.response.previewPath, '_blank');
},
successFileFolder(re, file, fileList) {fileList = fileList.filter(item => item.response.code !== 500);this.form.trainData = fileList;if (re.code === 500) {this.$message.error(re.message);} else {this.$message.success(re.message);}this.loading.close();
},
uploadProgress() {this.loading = this.$loading({lock: true,text: '文件上传中…',spinner: 'el-icon-loading',background: 'rgba(0, 0, 0, 0.5)'});
},
uploadError() {this.loading.close();this.$message.error('文件上传失败,请检查文件大小或文件格式');
}

结束语

翻了官方文档,没有看到处理方法,之所以这么处理,是因为显示的fileList列表并不是赋值数据需要显示的列表。
正好遇到此问题,整理出来解决方法,希望能帮到需要的人。


http://www.ppmy.cn/news/1439740.html

相关文章

Linux的学习之路:22、线程(2)

摘要 本章继续讲一下线程的东西 目录 摘要 一、抢票 二、加锁保护 三、死锁 1、死锁四个必要条件 2、避免死锁 四、同步 1、常见的线程安全的情况 2、常见不可重入的情况 3、常见可重入的情况 4、可重入与线程安全联系 5、可重入与线程安全区别 一、抢票 这里回…

Qt下使用OpenCV截取图像并在QtableWidget表格上显示

文章目录 前言一、在QLabel上显示图片并绘制矩形框二、保存矩形框数据为CSV文件三、保存截取图像四、将截取图像填充到表格五、图形视图框架显示图像六、示例完整代码总结 前言 本文主要讲述了在Qt下使用OpenCV截取绘制的矩形框图像&#xff0c;并将矩形框数据保存为CSV文件&a…

Android使用ProtoBuf 适配 gradle7.5 gradle8.0

ProtoBuf 适配 Gradle7.5 gradle-wrapper.properties 配置 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.5-bin.zipProject&#xff1a;build.gradle: plugins {id com.android.application version 7.4.2 apply falseid com.android.library versio…

(四)Servlet教程——Maven的安装与配置

1.在C盘根目录下新建一个Java文件夹,该文件夹用来放置以下步骤下载的Maven&#xff1b; 2. 下载Maven的来源有清华大学开源软件镜像站和Apache Maven的官网&#xff0c;由于清华大学开源软件镜像站上只能下载3.8.8版本以上的Maven&#xff0c;我们选择在Apache Maven的官网上下…

【WPF+C# 项目开发软件的小结】

文章目录 前言一、WPF是什么&#xff1f;二、C#是什么&#xff1f;三、wpf 和c#的关系四、wpf 怎么调用c的dll1. 创建C DLL2. 构建C DLL3. 在WPF项目中引用DLL使用P/Invoke直接调用DLL函数 4. 处理数据类型和内存管理5. 调试和测试 总结 前言 提示&#xff1a;这里可以添加本文…

python -闭包和装饰器

闭包和装饰器的详细解释 什么是闭包&#xff1f; 闭包是一个特殊的函数结构&#xff0c;它允许一个函数访问其外层函数作用域中的变量&#xff0c;即使外层函数已经执行完毕。闭包的特点是记住了包围它的作用域中的变量。 示例代码 def outer(x):y 10def inner():return x…

交叉编译嵌入式openssl,关键是在config中指定编译器前缀

其实还是很顺利的。 下载 LINUX下载编译OpenSSL_linux下载 openssl-CSDN博客 编译 BUILD_LIBS${HOME}/build_libsCROSS_NAMEaarch64-mix210-linux export PATH/opt/linux/x86-arm/${CROSS_NAME}/bin:${PATH}make clean./config \--cross-compile-prefix${CROSS_NAME}- \no-…

AI作画算法原理详解:从数据到艺术的自动化之旅

AI作画算法原理详解&#xff1a;从数据到艺术的自动化之旅 在数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐步渗透到各个领域&#xff0c;其中AI作画技术更是引发了广泛关注。本文将详细解析AI作画算法的原理&#xff0c;带领读者了解从数据收集与处理到…