Skip to content
On this page

UploadPro 文件上传对话框

UploadPro 是一个高度封装、纯净无业务依赖的文件/文件夹上传对话框组件,基于 Vue 3 和 Element Plus 构建。

核心特性

  • 🚀 双模式支持:自由切换文件或文件夹上传模式。
  • 🖱️ 完美拖放:支持文件和文件夹的拖拽识别。
  • 🔍 智能校验:内置文件类型、大小、数量限制及全量查重逻辑。
  • 📁 文件夹递归:高效递归读取文件夹内容,保留 webkitRelativePath
  • 🔔 用户体验优化:采用防抖消息提示,避免批量上传时的消息轰炸。

在线演示

交互体验

点击下方按钮打开对话框。你可以在此尝试拖入文件或切换文件夹模式测试递归效果。

安装与配置

1. 依赖安装

bash
pnpm add element-plus @element-plus/icons-vue
1

2. 全局注册

.vitepress/theme/index.ts 中:

typescript
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import * as ElementPlusIconsVue from '@element-plus/icons-vue';
import UploadPro from './components/UploadPro.vue';

export default {
  enhanceApp({ app }) {
    app.use(ElementPlus);
    for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
      app.component(key, component);
    }
    app.component('UploadPro', UploadPro);
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

API 参考

Props

参数类型默认值说明
visiblebooleanfalse是否显示对话框
configUploadConfig-上传功能的详细配置项

UploadConfig 详情

属性类型默认值说明
maxFileSizenumber10单个文件最大限制 (MB)
maxFilesCountnumber10最大允许上传文件数量
allowedFileTypesobject参考源码包含 documents, images, spreadsheets 的扩展名数组

Events

事件名参数说明
upload(files: File[])用户点击“确定”时触发,返回筛选后的有效文件数组
cancel-用户点击“取消”或关闭对话框时触发

源码实现

点击查看 UploadPro.vue 完整代码

render_diffs(file:///g:/Code/01%20FrondEnd/04_WEB_Learn_Code/Project/dev-knowledge-base/docs/.vitepress/theme/components/UploadPro.vue)