Upload 上传
xy-upload 适合附件上传、图片上传和补充材料提交。当前版本接口完善,主绑定方式推荐使用 v-model:file-list。
何时使用
- 需要用户上传附件、文档或补充材料时,使用默认列表模式。
- 需要图片预览和回显时,使用
list-type="picture"或"picture-card"。 - 需要批量拖拽上传时,开启
drag。 - 需要手动控制上传时机(如先选文件再统一提交)时,关闭
auto-upload并调用submit()。 - 需要接入自定义上传 SDK(签名直传、网关封装等)时,使用
http-request。 - 需要限制文件类型或数量时,使用
accept和limit。
何时不使用
- 需要纯图片裁剪编辑时,Upload 不提供裁剪能力,应搭配图片编辑组件使用。
- 需要大文件分片上传时,Upload 不内置分片逻辑,需通过
http-request自行实现。 - 需要文件夹树形展示时,Upload 的
directory只负责选择,不提供目录结构渲染。 - 需要上传进度可视化看板时,Upload 的进度仅展示在文件项内,复杂场景需自行扩展。
基础用法
默认模式适合普通附件上传场景,用户点击触发区后选择本地文件。
点击选择文件
支持本地文件上传
支持 png、jpg、pdf 等常见格式
拖拽上传
drag 适合补充材料、附件批量提交这类更重的上传场景。
拖拽文件到此处
或点击选择文件
拖拽上传适合补充材料、附件批量提交等场景
图片列表
list-type="picture" 适合封面、设计稿和截图回显。
点击选择文件
支持本地文件上传
图片列表适合头像、封面和设计稿回显。
图片卡片
list-type="picture-card" 会把上传入口直接嵌入卡片列表末尾。
+上传
超限反馈
通过 limit 和 exceed 事件,把超限文件直接反馈给用户。
点击选择文件
支持本地文件上传
尝试一次选择 3 个以上文件,可以看到超限反馈
最多保留 2 个文件。当前文件数:0
手动上传
关闭 auto-upload 后,可以先把文件加入列表,再通过组件暴露的 submit() 手动发起上传。
点击选择文件
支持本地文件上传
先选中文件,再由业务按钮手动发起上传
待处理文件:0
上传前校验
before-upload 返回 false 时,文件不会进入上传流程。
点击选择文件
支持本地文件上传
上传前先做业务校验,失败文件不会进入列表
自定义请求
通过 http-request 可以接入自定义上传 SDK、签名直传或网关封装。
点击选择文件
支持本地文件上传
适合接入项目自己的 SDK、签名直传或网关封装
自定义触发器与说明
通过 trigger 和 tip 插槽,可以把上传入口接入项目自己的按钮体系。
支持 PDF、PNG、JPG,单文件不超过 10 MB。
自定义文件项
file 插槽适合把文件列表渲染成更贴近业务的样式。
点击选择文件
支持本地文件上传
- success合作协议.pdf
文件类型限制
通过 accept 给出浏览器侧的文件类型过滤提示,适合合同、截图和设计稿补传场景。
拖拽文件到此处
或点击选择文件
仅接收 PDF / PNG / JPG / JPEG,用于合同、截图和设计稿补充
允许类型:PDF / PNG / JPG / JPEG当前文件数:0
目录上传
directory 适合素材目录、静态资源包或批量截图目录的整体导入。
点击选择文件
支持本地文件上传
支持选择整个目录
粘贴上传与自定义预览
开启 paste 后可以直接粘贴剪贴板中的文件;preview-file 适合在预览前换成自定义地址或签名图像。
+上传
支持直接粘贴截图或图片文件
编辑态回显与继续补传
通过 v-model:file-list 传入现有文件列表,适合编辑态回显和继续补充上传。
点击选择文件
支持本地文件上传
预设文件列表适合编辑态回显和继续补充上传
行为约定
- 上传触发区支持
Enter / Space打开文件选择。 limit用来限制最终可保留的文件数量。auto-upload="false"时,文件会先进入ready状态,等待手动调用submit()。before-upload返回false或 rejected Promise 时,会阻止该文件进入上传流程。list-type="picture"和picture-card会优先使用url或本地图像对象 URL 渲染缩略图。directory只影响文件选择入口,不会改变file-list的结构。paste只在当前上传区获得焦点或命中粘贴事件时生效。- 在表单中会把校验消息关联到上传触发区。
API
Upload Attributes
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
file-list | 当前文件列表 | UploadFileItem[] | [] |
action | 上传地址 | string | '#' |
headers | 请求头 | UploadProps["headers"] | {} |
method | 上传方法 | string | 'post' |
data | 额外上传参数 | UploadProps["data"] | {} |
name | 文件字段名 | string | 'file' |
accept | 原生文件类型限制 | string | '' |
multiple | 是否支持多选 | boolean | false |
limit | 最大文件数量 | number | undefined |
disabled | 是否禁用 | boolean | false |
drag | 是否启用拖拽上传 | boolean | false |
directory | 是否支持目录选择 | boolean | false |
paste | 是否支持粘贴上传 | boolean | false |
tip | 上传提示文案 | string | '' |
size | 组件尺寸 | UploadProps["size"] | 跟随全局配置 |
auto-upload | 是否自动上传 | boolean | true |
show-file-list | 是否显示文件列表 | boolean | true |
with-credentials | 是否携带 cookie | boolean | false |
list-type | 文件列表展示类型 | UploadListType | 'text' |
before-upload | 上传前钩子 | UploadProps["beforeUpload"] | undefined |
before-remove | 删除前钩子 | UploadProps["beforeRemove"] | undefined |
on-change | 文件选择或状态变化钩子 | UploadProps["onChange"] | undefined |
on-remove | 删除文件钩子 | UploadProps["onRemove"] | undefined |
on-preview | 点击预览钩子 | UploadProps["onPreview"] | undefined |
preview-file | 自定义预览地址解析 | UploadProps["previewFile"] | undefined |
on-success | 上传成功钩子 | UploadProps["onSuccess"] | undefined |
on-progress | 上传进度钩子 | UploadProps["onProgress"] | undefined |
on-error | 上传失败钩子 | UploadProps["onError"] | undefined |
on-exceed | 超限钩子 | UploadProps["onExceed"] | undefined |
http-request | 自定义上传请求实现 | UploadRequestHandler | undefined |
UploadFileItem
| 字段 | 说明 | 类型 |
|---|---|---|
uid | 文件唯一标识 | string |
name | 文件名 | string |
size | 文件大小 | number |
type | MIME 类型 | string |
status | 当前状态 | UploadStatus |
percentage | 上传进度 | number |
response | 上传响应 | unknown |
url | 文件地址 | string |
raw | 原始文件对象 | UploadRawFile |
Upload Events
| 事件 | 说明 | 参数 |
|---|---|---|
update:fileList | 更新文件列表 | UploadFileItem[] |
Upload Exposes
| 暴露项 | 说明 | 类型 |
|---|---|---|
submit | 手动上传待上传项 | UploadInstance["submit"] |
abort | 取消上传 | UploadInstance["abort"] |
clearFiles | 清空当前文件列表 | UploadInstance["clearFiles"] |
handleStart | 手动把原始文件加入队列 | UploadInstance["handleStart"] |
handleRemove | 手动移除文件项 | UploadInstance["handleRemove"] |
Upload Slots
| 插槽 | 说明 |
|---|---|
default | 默认上传区内容 |
trigger | 自定义上传触发器 |
tip | 自定义提示文案 |
file | 自定义文件项渲染 |