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

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/2:信息高速公路的革命】
  • C++中的vector和list的区别与适用场景
  • 西门子触摸屏文本显示不全,传送字体文件到屏幕的具体操作方法
  • C++ 日志系统实战第三步:熟悉掌握各种设计模式
  • 信令与流程分析
  • 界面控件DevExpress WinForms v25.1 - 数据处理功能持续增强
  • freecad参数化三维模型装配体解析至web端,切换参数组或修改参数
  • Parasoft C++Test软件单元测试_对函数打桩的详细介绍
  • Java对接企业微信实战笔记
  • SQL注入高级绕过手法汇总 重点
  • 在java程序中,类,进程,线程他们之间的关系以及main方法与他们之间的关系
  • 找出字符串中第一个匹配项的下标
  • Xmind快捷键大全
  • 区块链驱动的供应链金融创新:模型构建与商业化路径研究
  • 身份与访问管理(IAM):零信任架构下的认证授权技术与实战
  • cgroup sched_cfs_bandwidth_slice参数的作用及效果
  • CUDA编程之Grid、Block、Thread线程模型
  • uni-app云开发总结
  • 分布式队列对消息语义的处理
  • 飞机会员日
  • 杨荫凯已任浙江省委常委、组织部部长
  • 外交部回应美财长涉中国发展经济模式言论:损害各国人民共同利益的是美方
  • 中美正在就关税问题谈判甚至会达成协议?外交部:都是假消息
  • 对话地铁读书人|中学教师董女士:借来的书更好看
  • 福特中国CFO:依然坚信中国市场,上海帮助公司吸引到人才
  • 工程院院士应汉杰不再担任苏州大学校长