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

8.5 KiB
Raw Permalink Blame History

管理端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

curl -X POST "https://your-api.com/admin/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"password"}'

2. 生成上传签名

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

# 使用返回的签名信息上传到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配置

# 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}

支持的文件格式

// 图片格式
.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

文件安全

  • 类型白名单: 严格的文件类型验证,防止恶意文件上传
  • 大小限制: 可配置的文件大小限制,防止过大文件占用存储
  • 目录隔离: 支持子目录分类,便于文件管理
  • 操作审计: 完整的操作日志,支持追溯

📖 使用文档

🚨 注意事项

重要提醒

  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配置参数

调试技巧

// 开启调试模式
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