2025-07-29 10:06:40 +08:00
|
|
|
|
# Upload 组件
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
通用的文件上传组件,基于 Ant Design 的 Upload 组件封装。
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
## 组件列表
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
### UploadComponent
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
通用的图片/文件上传组件,支持多文件上传。
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
#### 使用方法
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
|
|
|
|
|
```tsx
|
|
|
|
|
|
import UploadComponent from '@/components/Upload';
|
|
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
// 基础用法
|
2025-07-28 16:53:18 +08:00
|
|
|
|
<UploadComponent
|
|
|
|
|
|
value={imageUrls}
|
|
|
|
|
|
onChange={setImageUrls}
|
|
|
|
|
|
count={9}
|
|
|
|
|
|
accept="image/*"
|
2025-07-29 10:06:40 +08:00
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
// 单文件上传
|
|
|
|
|
|
<UploadComponent
|
|
|
|
|
|
value={[singleImage]}
|
|
|
|
|
|
onChange={(urls) => setSingleImage(urls[0])}
|
|
|
|
|
|
count={1}
|
2025-07-28 16:53:18 +08:00
|
|
|
|
listType="picture-card"
|
|
|
|
|
|
/>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
#### 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
|
|
|
|
|
|
|
|
|
|
|
|
专门的视频上传组件,支持单文件上传。
|
|
|
|
|
|
|
|
|
|
|
|
#### 使用方法
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
|
|
|
|
|
```tsx
|
2025-07-29 10:06:40 +08:00
|
|
|
|
import VideoUpload from '@/components/Upload/VideoUpload';
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
<VideoUpload
|
|
|
|
|
|
value={videoUrl}
|
|
|
|
|
|
onChange={setVideoUrl}
|
|
|
|
|
|
disabled={false}
|
|
|
|
|
|
/>
|
2025-07-28 16:53:18 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
#### Props
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
| 参数 | 说明 | 类型 | 默认值 |
|
|
|
|
|
|
|------|------|------|--------|
|
|
|
|
|
|
| value | 已上传的视频URL | `string` | `""` |
|
|
|
|
|
|
| onChange | 视频URL变化时的回调 | `(url: string) => void` | - |
|
|
|
|
|
|
| disabled | 是否禁用 | `boolean` | `false` |
|
|
|
|
|
|
| className | 自定义样式类名 | `string` | - |
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
## 技术实现
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
### 上传接口
|
|
|
|
|
|
|
|
|
|
|
|
- **接口地址**: `/v1/attachment/upload`
|
|
|
|
|
|
- **请求方式**: `POST`
|
|
|
|
|
|
- **请求格式**: `multipart/form-data`
|
|
|
|
|
|
- **文件字段名**: `file`
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
### 响应格式
|
|
|
|
|
|
|
|
|
|
|
|
组件会自动处理以下响应格式:
|
|
|
|
|
|
|
|
|
|
|
|
```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`: 文件已删除
|
2025-07-28 16:53:18 +08:00
|
|
|
|
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
|
2025-07-29 10:06:40 +08:00
|
|
|
|
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 {
|
|
|
|
|
|
// 上传中状态样式
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|