Appearance
useCustomUpload 自定义上传 Hook
用于处理文件上传的自定义 Hook,支持文件大小、数量、类型的校验,以及上传、删除等操作。
提示
1、此hook采用覆盖request方式,如想配置action地址,可直接使用antd的Upload组件。
2、使用前请确保已配置好上传、删除、预览的后端接口(可在初始化时配置)。
基础用法
普通的input上传(多选)
复制代码
查看代码
结合antd的Upload组件
最大上传数: 1单个文件最大: 2MB接受的文件类型: .jpg, .png, .pdf
复制代码
查看代码
结合FilePreviewItem组件
最大上传数: 8单个文件最大: 50MB接受的文件类型: .jpg, .png, .pdf, .xlsx, .docx
复制代码
查看代码
参数说明
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| options | 配置项 | Ref<IUploadOption> | ComputedRef<IUploadOption> | - |
IUploadOption 配置项
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| maxCount | 最大上传数量(antd内置的maxCount不在支持,当为 1 时,始终用最新上传的代替当前) | number | - |
| multiple | 是否需要批量上传(注意:这里是指附件为数组形式,默认为files[],调用的接口为api下的fileUploadMulti,antd upload设置了multiple,内部还是是调用多次的单次上传,估不需要设置此参数) | boolean | false |
| maxSize | 单个文件最大大小(MB) | 'number' | 'string' | - |
| acceptTypes | 允许上传的文件类型 | string[] | - |
| transformResult | 上传结果转换函数(这里是单条) | (res: IFileItem) => any | - |
| afterUpload | 上传完成后的回调 | (files: IFileItem[]) => void | - |
| afterDelete | 删除完成后的回调 | (files: IFileItem[]) => void | - |
IFileItem
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| id | 文件唯一标识 | string | - |
| fileName | 文件名 | string | - |
| fileType | 文件类型 | string | - |
| fileSize | 文件大小 | 'string' | 'number' | - |
| status | 状态 | 'uploading' | 'done' | 'error' | - |
| previewUrl | 文件预览地址 | string | - |
返回值
| 参数 | 说明 | 类型 |
|---|---|---|
| files | 文件列表 | Ref<IFileItem[]> |
| uploadLoading | 上传加载状态(本次上传,单/多) | Ref<boolean> |
| beforeUpload | 上传前校验函数 | (file: IFileItem, fileList?: IFileItem[]) => boolean |
| customRequest | 自定义上传函数 | (option: {file: IFileItem | IFileItem[];afterUpload?: (IFileItem[] => void)}) => Promise<void> |
| handleDelFile | 删除文件函数 | (file: IFileItem) => Promise<void> |
注意事项
- 文件类型校验目前仅通过文件名后缀判断,未做 MIME 类型校验(需要自己配置accept)
- acceptTypes 这里和 antd accept 不同,为类型的后缀,如:
'.jpg', '.png', '.pdf' - 上传前会自动进行文件大小、数量、类型的校验
- customRequest 和antd原始的customRequest参数有一定差异,仅保留了file字段(简易传入数组)
- 可以通过
transformResult自定义上传结果的转换逻辑(这里为单条转换)
支持的acceptTypes
.jpeg, .jpg, .png, .svg, .xls, .xlsx, .zip, .rar, .doc, .docx, .mp4, .mpeg, .avi, .pdf, .ppt, .pptx, .txt, .mp3