# Upload 组件 通用的文件上传组件,基于 Ant Design 的 Upload 组件封装。 ## 组件列表 ### UploadComponent 通用的图片/文件上传组件,支持多文件上传。 #### 使用方法 ```tsx import UploadComponent from '@/components/Upload'; // 基础用法 // 单文件上传 setSingleImage(urls[0])} count={1} listType="picture-card" /> ``` #### Props | 参数 | 说明 | 类型 | 默认值 | |------|------|------|--------| | value | 已上传的文件URL数组 | `string[]` | `[]` | | onChange | 文件列表变化时的回调 | `(urls: string[]) => void` | - | | count | 最大上传数量 | `number` | `9` | | accept | 接受的文件类型 | `string` | `"image/*"` | | listType | 上传列表的内建样式 | `"text" \| "picture" \| "picture-card"` | `"picture-card"` | | disabled | 是否禁用 | `boolean` | `false` | | className | 自定义样式类名 | `string` | - | ### VideoUpload 专门的视频上传组件,支持单文件上传。 #### 使用方法 ```tsx import VideoUpload from '@/components/Upload/VideoUpload'; ``` #### Props | 参数 | 说明 | 类型 | 默认值 | |------|------|------|--------| | value | 已上传的视频URL | `string` | `""` | | onChange | 视频URL变化时的回调 | `(url: string) => void` | - | | disabled | 是否禁用 | `boolean` | `false` | | className | 自定义样式类名 | `string` | - | ## 技术实现 ### 上传接口 - **接口地址**: `/v1/attachment/upload` - **请求方式**: `POST` - **请求格式**: `multipart/form-data` - **文件字段名**: `file` ### 响应格式 组件会自动处理以下响应格式: ```json { "code": 200, "data": "https://example.com/file.jpg", "message": "success" } ``` 或者: ```json { "code": 200, "data": { "url": "https://example.com/file.jpg" }, "message": "success" } ``` ### 文件限制 - **图片文件**: 最大 5MB - **视频文件**: 最大 50MB - **支持格式**: 根据 `accept` 属性设置 ### 状态管理 组件内部管理以下状态: - `uploading`: 文件上传中 - `done`: 文件上传完成 - `error`: 文件上传失败 - `removed`: 文件已删除 ## 注意事项 1. **API 集成**: 组件使用 Ant Design Upload 的 `action` 属性,直接调用 `/v1/attachment/upload` 接口 2. **文件验证**: 在 `beforeUpload` 中进行文件类型和大小验证 3. **状态同步**: 组件会自动同步 `value` 和内部 `fileList` 状态 4. **错误处理**: 上传失败时会显示错误提示并自动清理失败的文件 5. **进度显示**: 上传过程中会显示加载状态和进度指示 ## 样式定制 组件使用 SCSS Modules,可以通过修改 `index.module.scss` 文件来自定义样式: ```scss .upload-container { // 容器样式 } .upload-button { // 上传按钮样式 } .upload-icon { // 图标样式 } .upload-text { // 文字样式 } .uploading { // 上传中状态样式 } ```