Skip to content

上传 Upload ​

合成进化

基础使用 ​

action 指定上传地址,也可以使用 customRequest 完全接管请求过程。文件列表由 UploadFileList 渲染,展示每个文件的名称、进度和操作入口。

隐藏源代码

图片模式 ​

把 mode 设为 'image' 时改由 UploadImage 渲染卡片网格:图片显示缩略图并支持点击预览,其它文件显示类型图标。thumbnailType 决定缩略图的生成方式,createThumbnailUrl 可以完全自定义缩略图地址。

隐藏源代码

拖拽上传 ​

设置 draggable 后,内置的上传按钮会替换成 UploadDragger:整个像素虚线区域都可以接收拖入的文件,点击它同样会打开文件选择框,拖入的文件与选择框选中的文件走同一套流程。需要自己决定它摆放的位置时,把 UploadDragger 放进 trigger 插槽即可。

Click or drag files here to upload
隐藏源代码

禁用 ​

disabled 设为 true 后,Upload 会忽略选取、拖入以及列表内的各项操作,内置按钮、UploadDragger 与 UploadFileList / UploadImage 的操作入口都会呈现禁用样式。

Click or drag files here to upload
majyou.jpg
隐藏源代码

手动上传与中断 ​

autoUpload 设为 false 时文件先停留在待上传状态,再通过 Upload 暴露的 submit 方法开始上传,失败的文件可以用 retry 重试。abort 会把进行中和排队中的文件都标记为失败并保留在列表中,同时触发 abort 事件而不触发 error 事件;abortable 设为 false 时 Upload 会忽略中断调用,UploadFileList 与 UploadImage 也会隐藏中断入口。

隐藏源代码

选取限制 ​

accept 限定可选的文件类型,支持扩展名、MIME 类型,以及 audio/*、image/*、video/* 三种通配;multiple 控制一次能否选取多个文件。beforeUpload 事件可以进一步校验文件,处理函数返回 false 时该文件不会进入列表。

隐藏源代码

并发 ​

concurrency 限制同时进行的上传数量:一次选取多个文件时,超出的文件会先进入排队,处于 queueing 状态且进度恒为零,等前面的上传结束后依次开始。

隐藏源代码

下载 ​

文件带有 url 时,UploadFileList 会把文件名渲染成下载链接,UploadImage 会显示下载入口;也可以用 customDownload 接管下载。

majyou.jpg
js-logo.png
隐藏源代码

自定义文件列表 ​

fileList 与 defaultFileList 分别用于受控和非受控地维护文件列表,需要完全自定义时可以用 file-list 插槽替换掉整个列表区域。

隐藏源代码

手动组合 ​

上传的三个子组件都可以单独摆放:UploadFileList 与 UploadImage 放进 file-list 插槽,UploadDragger 放进 trigger 插槽,它们仍然通过 Upload 提供的上下文共享文件列表与各项操作。

Click or drag files here to upload
隐藏源代码

API ​

UploadProps ​

属性类型可选默认值描述版本
acceptstring[]是限定可选的文件类型。0.2.1
size'small' | 'medium' | 'large'是'medium'Upload 的尺寸。0.2.1
mode'file' | 'image'是'file'文件列表的展示模式。0.2.1
thumbnailType'objectURL' | 'dataURL'是'objectURL'缩略图的生成方式。0.2.1
createThumbnailUrlCreateThumbnailUrl是自定义缩略图地址。0.2.1
multipleboolean是true是否允许一次选取多个文件。0.2.1
draggableboolean是false是否用 UploadDragger 替换内置的上传按钮。0.2.1
disabledboolean是false是否禁用 Upload。0.2.1
abortableboolean是true是否允许中断进行中和排队中的上传。0.2.1
autoUploadboolean是true选取文件后是否自动开始上传。0.2.1
concurrencynumber是同时进行的上传数量上限,未设置或不大于 0 时不限制。0.2.1
actionstring是上传请求的地址。0.2.1
methodstring是'post'上传请求使用的方法。0.2.1
namestring是'file'上传文件在请求中的字段名。0.2.1
dataUploadData是附加在上传请求中的数据。0.2.1
headersUploadHeaders是上传请求的请求头。0.2.1
withCredentialsboolean是false跨域上传时是否携带凭据。0.2.1
responseTypeXMLHttpRequestResponseType是'text'上传请求期望的响应类型。0.2.1
isErrorState(xhr: XMLHttpRequest) => boolean是判断上传请求是否失败。0.2.1
customRequestCustomRequest是自定义上传请求。0.2.1
customDownloadCustomDownload是自定义下载行为。0.2.1
fileListFileInfo[]是受控的文件列表。0.2.1
defaultFileListFileInfo[]是非受控模式下默认的文件列表。0.2.1
buttonPropsButtonProps & EmitEvent<ButtonEvents> & RestAttrs是内置 Button 的属性。0.2.1
uploadFileListPropsUploadFileListProps是传给 UploadFileList 的属性,尺寸沿用 Upload 的尺寸。0.2.1
uploadImagePropsUploadImageProps是传给 UploadImage 的属性,尺寸沿用 Upload 的尺寸。0.2.1
uploadDraggerPropsUploadDraggerProps是传给 UploadDragger 的属性。0.2.1

UploadEvents ​

事件参数描述版本
update:fileListfileList: FileInfo[]文件列表变化时触发。0.2.1
beforeUploadparams: { file: File; fileList: FileInfo[] }文件加入列表前触发,需返回 Promise<boolean | void> | boolean | void 类型的数据判断是否成功,await 后值为 false 时该文件不会加入列表。0.2.1
beforeRemoveparams: { file: FileInfo; fileList: FileInfo[] }文件移除前触发,需返回 Promise<boolean | void> | boolean | void 类型的数据判断是否成功,await 后值为 false 时取消移除。0.2.1
changefileList: FileInfo[], e: Event文件列表变化时触发(新增、移除或清空)。0.2.1
progressitem: FileInfo, percent: number, e: ProgressEvent上传进度变化时触发。0.2.1
finishitem: FileInfo, response: any, e: ProgressEvent文件上传完成时触发。0.2.1
erroritem: FileInfo, error: any, e: ProgressEvent文件上传失败时触发。0.2.1
abortitem: FileInfo文件被中止时触发。0.2.1
removeitem: FileInfo, e: MouseEvent文件被移除时触发。0.2.1

UploadSlots ​

插槽参数描述版本
triggeropen: () => void触发选取文件的区域。0.2.1
file-listfileList: FileInfo[], remove: (id: string) => void, abort: (id?: string) => void, submit: (fileId?: string) => void, retry: (fileId?: string) => void, download: (file: FileInfo) => void文件列表区域,作用域提供文件列表与各项操作,其中未指定文件的操作作用于全部对应文件。0.2.1

UploadExpose ​

属性类型可选默认值描述版本
open() => void否打开文件选择框。0.2.1
submit(fileId?: string) => void否开始上传待上传的文件,未指定文件时处理全部待上传的文件。0.2.1
retry(fileId?: string) => void否重试上传失败的文件,未指定文件时处理全部上传失败的文件。0.2.1
remove(id: string) => void否从列表中移除文件。0.2.1
abort(id?: string) => void否中断进行中和排队中的上传,未指定文件时中断全部进行中和排队中的上传。0.2.1
clear() => void否清空文件列表。0.2.1

UploadFileListProps ​

属性类型可选默认值描述版本
size'small' | 'medium' | 'large'是'medium'UploadFileList 的尺寸,未设置时沿用 Upload 的尺寸。0.2.1
abortableboolean是true是否允许中断进行中和排队中的上传,与 Upload 同时允许时才会展示中断入口。0.2.1
previewableboolean是true是否允许点击缩略图进行预览。0.2.1
showProgressboolean是true是否展示上传进度。0.2.1

UploadImageProps ​

属性类型可选默认值描述版本
size'small' | 'medium' | 'large'是'medium'UploadImage 的尺寸,未设置时沿用 Upload 的尺寸。0.2.1
abortableboolean是true是否允许中断进行中和排队中的上传,与 Upload 同时允许时才会展示中断入口。0.2.1
previewableboolean是true是否允许点击缩略图进行预览。0.2.1
showProgressboolean是true是否展示上传进度。0.2.1

UploadDraggerProps ​

属性类型可选默认值描述版本
textstring是拖拽区域的提示文字。0.2.1

UploadDraggerSlots ​

插槽参数描述版本
default拖拽区域的提示内容。0.2.1
icon拖拽区域的图标。0.2.1

FileInfo ​

ts
export interface FileInfo {
	id: string
	name: string
	type?: string
	file?: File
	state: 'pending' | 'queueing' | 'uploading' | 'finished' | 'error'
	progress: number
	url?: string
	thumbnailUrl?: string
	response?: any
}

UploadData ​

ts
export type UploadData =
	| Record<string, string>
	| ((params: { file: FileInfo }) => Record<string, string>)

UploadHeaders ​

ts
export type UploadHeaders =
	| Record<string, string>
	| ((params: { file: FileInfo }) => Record<string, string>)

UploadPatch ​

ts
export type UploadPatch = {
	url?: string
	thumbnailUrl?: string
	response?: any
}

UploadCustomRequestOptions ​

ts
export interface UploadCustomRequestOptions {
	file: FileInfo
	action?: string
	withCredentials?: boolean
	data?: UploadData
	headers?: UploadHeaders
	signal: AbortSignal
	setProgress: (e: { percent: number }) => void
	setFinish: (patch?: UploadPatch) => void
	setError: (patch?: UploadPatch) => void
}

CustomRequest ​

ts
export type CustomRequest = (options: UploadCustomRequestOptions) => any

CustomDownload ​

ts
export type CustomDownload = (params: { file: FileInfo }) => void

CreateThumbnailUrl ​

ts
export type CreateThumbnailUrl = (params: {
	file: FileInfo
}) => string | undefined | Promise<string | undefined>

EmitEvent ​

ts
export type EmitEvent<T extends Record<string, any>> = {
	[K in keyof T as `on${Capitalize<K & string>}`]?: (...args: T[K]) => void
}

RestAttrs ​

ts
import type { StyleValue } from 'vue'

export type VueClassValue = string | Record<string, any> | VueClassValue[]
export type VueStyleValue = StyleValue

export type RestAttrs = {
	style?: VueStyleValue | null
	class?: VueClassValue | null
	[x: string]: any
}