Upload 上传
文件上传组件:隐藏 input 覆盖触发区,XHR 直传 action(FormData 提交,文件字段名由 name 指定,data 附加表单字段、headers 附加请求头),内置文件列表、进度条与数量限制。文件项包含 uid / name / size / status(ready | uploading | success | fail)/ percentage 字段;上传过程中 status 为 uploading 并展示进度,结束后按 HTTP 状态码落入 success 或 fail。
基础用法
action 为必传上传地址,multiple 支持一次选择多个文件,accept 按扩展名或 MIME 过滤可选文件。
受控文件列表
v-model:file-list 受控列表,可预置已上传文件(status 为 success 的项带已上传图标),移除文件时同步更新。
数量限制
limit 限制最大数量,超限不再加入列表并触发 exceed 事件。
手动上传
auto-upload=false 时选择文件仅进入列表(status 为 ready),调用实例方法 submit 才开始上传全部 ready 文件。
拖拽与照片墙
drag 开启拖拽区(点击与拖入都走同一入口,悬停高亮,#trigger 可整体替换拖拽区内容,常配 accept 限定类型);list-type 三种取值:text 普通列表、picture 列表项前置文件图标、picture-card 触发区与列表呈方形卡片。照片墙常与 limit 组合,超限触发 exceed 事件且不加入列表。
照片墙自定义缩略图
内置列表(含 picture-card)渲染的是「图标 + 文件名」,不含图片缩略图预览,组件也没有缩略图插槽;需要预览时的完整做法:show-file-list=false 关闭内置列表,change 事件拿到 file.raw 后用 FileReader 转 data URL,自行渲染卡片网格(本例 auto-upload=false 避免真实上传,仅演示本地预览)。
自定义触发区与隐藏列表
#trigger 插槽替换默认触发内容(drag 模式下替换整个拖拽区);show-file-list=false 隐藏文件列表,配合上传结果事件自行维护展示。
API
Upload Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| action | 上传地址(POST) | string | |
| headers | 请求头 | object | {} |
| data | 随文件附加的表单字段 | object | {} |
| name | 文件字段名 | string | file |
| multiple | 支持多选 | boolean | false |
| limit | 最大上传数量,超限触发 exceed 且不加入列表 | number | — |
| disabled | 禁用(响应表单禁用注入) | boolean | false |
| drag | 拖拽上传 | boolean | false |
| autoUpload | 选择后立即上传,false 时通过 submit 手动提交 | boolean | true |
| listType | 列表样式 | text | picture | picture-card | text |
| showFileList | 显示文件列表 | boolean | true |
| accept | 原生 accept 文件类型过滤 | string | |
| fileList | 受控文件列表(v-model:fileList),缺省内部维护 | array | undefined |
| beforeUpload | 上传前钩子,返回 false(或抛错)取消上传 | (file) => boolean | Promise | — |
Events
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| update:fileList | 文件列表变化 | (fileList) => void | — |
| change | 文件状态变化(新增/开始上传/结束) | (file, fileList) => void | — |
| remove | 移除文件 | (file, fileList) => void | — |
| success | 上传成功(HTTP 2xx) | (response, file, fileList) => void | — |
| error | 上传失败(非 2xx 或网络错误) | (error, file, fileList) => void | — |
| exceed | 超出 limit 数量 | (files, fileList) => void | — |
| preview | 点击文件名 | (file) => void | — |
Slots
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| trigger | 触发区内容(drag 模式下替换整个拖拽区) | — | 选择文件 / 拖拽区默认样式 |
Methods
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| submit | 上传所有 status 为 ready 的文件 | () => void | — |
| clearFiles | 清空文件列表 | () => void | — |
| abort | 中断指定文件的上传 | (file) => void | — |
| handleRemove | 移除指定文件 | (file) => void | — |