当前位置: 首页 > web >正文

Vue3文件上传组件实战:打造高效的Element Plus上传解决方案,可以对文件进行删除,查看,下载功能。

在现代Web开发中,文件上传功能是许多应用的核心需求之一。无论是企业管理系统、内容管理系统还是医疗信息系统,上传附件的功能都至关重要。本文将分享一个基于 Vue3Element Plus 实现的文件上传组件,结合父子组件的协作,展示如何构建一个功能强大、用户体验友好的文件上传解决方案。以下是完整的代码实现和使用指南,适合前端开发者参考和复用。

为什么选择这个解决方案?

  • 灵活性:支持多种文件类型和大小限制,轻松适配不同业务场景。

  • 用户体验:拖拽上传、实时预览、下载和删除功能一应俱全。

  • 可复用性:子组件封装完善,可在多个父组件中快速集成。

  • 国际化支持:通过 vue-i18n 实现多语言提示,适合国际化项目。

子组件:文件上传核心逻辑

子组件 UploadFiles 封装了文件上传的核心功能,包括文件类型和大小校验、上传进度管理、文件列表展示以及预览和下载功能。以下是完整的子组件代码:

<template><div class="w-full upload-file"><el-uploadref="fileUpload"v-if="props.type === 'default'":action="baseURL + other.adaptationUrl(props.uploadFileUrl)":before-upload="handleBeforeUpload":file-list="fileList":headers="headers":limit="limit":on-error="handleUploadError":on-remove="handleRemove":on-exceed="handleExceed":data="formData":auto-upload="autoUpload":on-success="handleUploadSuccess"class="upload-file-uploader"dragmultiple:show-file-list="false"><el-icon size="60" color="#999999"><UploadFilled /></el-icon><div class="el-upload__text">{{ $t('excel.operationNotice') }}<em>{{ $t('excel.clickUpload') }}</em></div><template #tip><div class="el-upload__tip" v-if="props.isShowTip">{{ $t('excel.pleaseUpload') }}<template v-if="props.fileSize">{{ $t('excel.size') }} <b style="color: #f56c6c">{{ props.fileSize }}MB</b></template><template v-if="props.fileType">{{ $t('excel.format') }} <b style="color: #f56c6c">{{ props.fileType.join('/') }}</b></template>{{ $t('excel.file') }}</div></template></el-upload><div class="file-list" v-if="fileList.length > 0"><el-table :data="fileList" style="width: 100%"><el-table-column prop="original" label="文件名" /><el-table-column label="操作" width="250"><template #default="scope"><el-button size="small" type="primary" link @click="handlePreview(scope.row)"><el-icon><View /></el-icon> 查看</el-button><el-button size="small" type="success" link @click="handleDownload(scope.row)"><el-icon><Download /></el-icon> 下载</el-button><el-button size="small" type="danger" link @click="handleRemove(scope.row)"><el-icon><Delete /></el-icon> 删除</el-button></template></el-table-column></el-table></div></div>
</template><script setup lang="ts" name="upload-file">
import { ref, computed, watch } from 'vue';
import { useMessage } from '/@/hooks/message';
import { Session } from '/@/
http://www.xdnf.cn/news/2048.html

相关文章:

  • 代码随想录算法训练营第五十八天 | 1.拓扑排序精讲 2.dijkstra(朴素版)精讲 卡码网117.网站构建 卡码网47.参加科学大会
  • 【基于Qt的QQ音乐播放器开发实战:从0到1打造全功能音乐播放应用】
  • 银行卡归属地查询的快速入门:API接口性能与安全兼备的高效实现
  • 文章记单词 | 第42篇(六级)
  • Integer[]::new方法引用
  • NLP系列【自然语言处理的深度学习模型综述】
  • 深入理解指针 (1)
  • 虚拟机网络NAT配置
  • 【Git】连接github时的疑难杂症(DNS解析失败)
  • 通过API接口在自己的独立站系统上架商品信息。(实战案例)
  • 1.9软考系统架构设计师:优秀架构设计师 - 超简记忆要点、知识体系全解、考点深度解析、真题训练附答案及解析
  • uniapp-商城-38-shop 购物车 选好了 进行订单确认4 配送方式1
  • 12.ArkUI Scroll的介绍和使用
  • 制作一款打飞机游戏22:表格导出
  • Mysql唯一性约束
  • 重生之--js原生甘特图实现
  • 从LLM到AI Agent的技术演进路径:架构解析与实现逻辑
  • 图解YOLO(You Only Look Once)目标检测(v1-v5)
  • QuecPython+GNSS:实现快速定位
  • Kafka Tool(Offset Explorer)国内下载: Kafka可视化连接工具
  • Vue选项式 API 与组合式 API
  • Docker容器持久化
  • 认识 Linux 内存构成:Linux 内存调优之页表、TLB、缺页异常、大页认知
  • Ubuntu中的防火墙工具
  • 实战!银河麒麟 KYSEC 安全中心执行控制高级配置指南
  • 苹果新规生效:即日起不再接受iOS 17 SDK编译的应用提交
  • BEVPoolv2:A Cutting-edge Implementation of BEVDet Toward Deployment
  • 16.ArkUI Toggle的介绍和使用
  • UML 活动图详解之网络媒体教学系统活动图分析
  • Memcached 主主复制架构搭建与 Keepalived 高可用实现