Files
1818web-hoduan/docs/admin-oss-upload-readme.md
2025-11-14 17:41:15 +08:00

243 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 管理端OSS文件上传功能
## 📋 功能概述
基于用户端OSS上传接口 `/user/oss/post-signature` 实现的管理端文件上传功能,提供了更强大的文件管理能力,同时**与用户端文件存储在同一目录下**,便于统一管理。
## ✅ 已实现功能
### 核心接口
-`POST /admin/oss/post-signature` - 生成OSS POST签名
-`DELETE /admin/oss/file` - 删除单个文件
-`POST /admin/oss/batch-delete` - 批量删除文件
-`GET /admin/oss/file-info` - 获取文件信息
-`GET /admin/oss/upload-config` - 获取上传配置
### 技术实现
-**DTO类设计**: AdminOssUploadRequest、AdminOssUploadResponse
-**服务层**: AdminOssService接口 + AdminOssServiceImpl实现
-**控制器**: AdminOssController包含完整的CRUD操作
-**权限验证**: 使用@RequireAdminOrStaff注解,确保只有管理员可访问
-**统一目录**: 与用户端共享`user_img/`目录
### 功能特性
-**更大文件**: 支持最大500MB文件上传用户端10MB
-**更多格式**: 支持图片、文档、音视频、压缩包等全格式
-**更长有效期**: 2小时有效期用户端1小时
-**完整管理**: 支持文件删除、批量删除、信息查询
-**灵活配置**: 支持自定义子目录、文件大小限制
-**操作记录**: 完整的操作日志记录
## 📁 目录结构
```
项目根目录/
├── src/main/java/com/dora/
│ ├── dto/
│ │ ├── AdminOssUploadRequest.java # 管理端上传请求DTO
│ │ └── AdminOssUploadResponse.java # 管理端上传响应DTO
│ ├── service/
│ │ ├── AdminOssService.java # 管理端OSS服务接口
│ │ └── impl/
│ │ └── AdminOssServiceImpl.java # 管理端OSS服务实现
│ └── controller/
│ └── AdminOssController.java # 管理端OSS控制器
├── docs/
│ ├── admin-oss-upload-api.md # 完整API文档
│ ├── admin-oss-upload-examples.md # 使用示例
│ └── admin-oss-upload-readme.md # 本文件
└── ...
```
## 🔗 存储路径
### 统一存储规则
- **基础目录**: `user_img/` (配置在OssConfig.userImgFolder)
- **用户端文件**: `user_img/{用户上传的文件}`
- **管理端文件**: `user_img/{指定子目录}/{管理端上传的文件}`
### 推荐子目录
```
user_img/
├── banners/ # Banner图片 (管理端)
├── images/ # 通用图片 (管理端)
├── documents/ # 文档文件 (管理端)
├── videos/ # 视频文件 (管理端)
├── audios/ # 音频文件 (管理端)
├── uploads/ # 默认目录 (管理端)
└── {用户文件} # 用户端直接上传的文件
```
## 🚀 快速使用
### 1. 获取管理员Token
```bash
curl -X POST "https://your-api.com/admin/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"password"}'
```
### 2. 生成上传签名
```bash
curl -X POST "https://your-api.com/admin/oss/post-signature" \
-H "Authorization: Bearer {admin_token}" \
-H "Content-Type: application/json" \
-d '{
"fileName": "banner.jpg",
"directory": "banners",
"maxSizeMB": 50
}'
```
### 3. 上传文件到OSS
```bash
# 使用返回的签名信息上传到OSS
curl -X POST "{返回的host}" \
-F "key={返回的dir}文件名" \
-F "policy={返回的policy}" \
-F "OSSAccessKeyId={返回的accessKeyId}" \
-F "x-oss-signature-version={返回的version}" \
-F "x-oss-credential={返回的x_oss_credential}" \
-F "x-oss-date={返回的x_oss_date}" \
-F "signature={返回的signature}" \
-F "success_action_status=200" \
-F "file=@/path/to/your/file.jpg"
```
## 📊 功能对比
| 特性 | 用户端接口 | 管理端接口 | 说明 |
|------|-----------|-----------|------|
| **接口路径** | `/user/oss/post-signature` | `/admin/oss/post-signature` | 路径不同 |
| **权限验证** | 无需认证 | 需要管理员Token | 安全级别不同 |
| **文件大小** | 最大10MB | 最大500MB | 管理端支持更大文件 |
| **文件格式** | 基础格式 | 全格式支持 | 管理端支持更多格式 |
| **有效期** | 1小时 | 2小时 | 管理端有效期更长 |
| **存储目录** | `user_img/` | `user_img/{subdir}/` | 同一根目录 |
| **管理功能** | 仅上传 | 完整CRUD | 管理端功能更全 |
## 🔧 配置说明
### OSS配置
```yaml
# application.yml
aliyun:
oss:
endpoint: https://oss-cn-hangzhou.aliyuncs.com
bucket-name: oss-1818ai-user-img
region: cn-hangzhou
user-img-folder: user_img/ # 统一存储目录
expiration-seconds: 3600
access-key-id: ${ALIYUN_OSS_ACCESS_KEY_ID}
access-key-secret: ${ALIYUN_OSS_ACCESS_KEY_SECRET}
```
### 支持的文件格式
```java
// 图片格式
.jpg, .jpeg, .png, .gif, .bmp, .webp, .svg, .ico, .tiff
// 文档格式
.pdf, .txt, .md, .json, .xml, .csv, .doc, .docx, .xls, .xlsx, .ppt, .pptx
// 压缩包格式
.zip, .rar, .7z, .tar, .gz, .bz2, .xz
// 音频格式
.mp3, .wav, .flac, .aac, .ogg, .wma
// 视频格式
.mp4, .avi, .mov, .wmv, .flv, .mkv, .webm
// 其他格式
.html, .css, .js, .sql, .log
```
## 🛡️ 安全特性
### 权限控制
- **接口级别**: `@RequireAdminOrStaff` 注解确保只有管理员/工作人员可访问
- **AspectJ切面**: 自动验证JWT Token有效性和用户权限
- **身份记录**: 自动记录操作者的管理员ID
### 文件安全
- **类型白名单**: 严格的文件类型验证,防止恶意文件上传
- **大小限制**: 可配置的文件大小限制,防止过大文件占用存储
- **目录隔离**: 支持子目录分类,便于文件管理
- **操作审计**: 完整的操作日志,支持追溯
## 📖 使用文档
- 📚 [完整API文档](./admin-oss-upload-api.md) - 详细的接口文档和参数说明
- 💻 [使用示例](./admin-oss-upload-examples.md) - JavaScript/Vue/React等框架的使用示例
- 🔧 [错误排查指南](#错误排查) - 常见问题和解决方案
## 🚨 注意事项
### 重要提醒
1. **目录统一**: 管理端和用户端文件存储在同一根目录 `user_img/`
2. **权限必需**: 所有管理端接口都需要有效的管理员JWT Token
3. **文件命名**: 建议使用时间戳+随机数避免文件名冲突
4. **大小限制**: 注意文件大小限制,避免上传失败
5. **网络超时**: 大文件上传注意设置合适的超时时间
### 最佳实践
1. **错误处理**: 做好网络异常和服务器错误的异常处理
2. **进度显示**: 大文件上传时显示进度,提升用户体验
3. **重试机制**: 对于网络不稳定情况,实现上传重试
4. **文件校验**: 上传完成后可进行文件完整性校验
5. **清理机制**: 定期清理失效或无用的文件
## 🔍 错误排查
### 常见错误及解决方案
| 错误代码 | 错误信息 | 可能原因 | 解决方案 |
|---------|---------|---------|---------|
| 401 | 未授权访问 | JWT Token无效或过期 | 重新登录获取新Token |
| 403 | 权限不足 | 不是管理员或工作人员 | 确认账号权限 |
| 400 | 不支持的文件类型 | 文件格式不在白名单中 | 检查文件格式是否支持 |
| 400 | 文件大小超限 | 文件超过大小限制 | 压缩文件或选择更小的文件 |
| 500 | OSS签名生成失败 | OSS配置错误 | 检查OSS配置参数 |
### 调试技巧
```javascript
// 开启调试模式
localStorage.setItem('debug', 'true');
// 查看详细错误信息
console.log('Upload error details:', error);
// 测试Token有效性
fetch('/admin/oss/upload-config', {
headers: { 'Authorization': `Bearer ${token}` }
})
.then(r => r.json())
.then(result => console.log('Token test:', result));
```
## 🔄 版本历史
### v1.0.0 (2024-12-25)
- ✅ 实现基础的管理端OSS上传功能
- ✅ 支持与用户端统一目录存储
- ✅ 完整的文件管理CRUD操作
- ✅ 权限验证和安全控制
- ✅ 支持多种文件格式和大文件上传
## 🤝 技术支持
如果在使用过程中遇到问题,请按以下步骤排查:
1. **检查Token**: 确认管理员JWT Token有效
2. **验证权限**: 确认当前用户有管理员/工作人员权限
3. **文件格式**: 确认文件格式在支持列表中
4. **大小限制**: 确认文件大小在限制范围内
5. **网络连接**: 确认网络连接正常
6. **OSS配置**: 确认OSS相关配置正确
---
*最后更新: 2024-12-25*
*版本: v1.0.0*