Files
suixinkan_ios_new/suixinkan/Core/Upload/Upload.md
汉秋 fdf4659048 Add Live module with stream management and album flows.
Migrate live stream management and live album from home placeholders, including alive album OSS upload, home routing, and unit tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-25 14:38:52 +08:00

2.6 KiB
Raw Blame History

Upload 模块业务逻辑

模块职责

Upload 模块负责 App 内通用文件上传能力,当前主要服务个人头像和实名认证证件图片,后续云盘、相册、任务、打卡点等模块迁移时复用同一套 OSS 上传入口。

该模块不负责业务表单提交,只负责:

  • 获取阿里云 OSS STS 临时配置。
  • 校验待上传文件大小和扩展名。
  • 生成按业务模块隔离的 OSS objectKey。
  • 调用阿里云 OSS Swift SDK 上传文件。
  • 返回最终可访问的文件 URL。

核心对象

  • UploadAPI:封装 /api/app/config/get-sts-token,只负责获取 STS 临时上传配置。
  • OSSUploadService:统一上传服务,封装 SDK 调用和进度回调。
  • OSSUploadPolicy上传策略管理大小限制、扩展名白名单、路径规则、MIME 类型和 URL 拼接。
  • AvatarImageProcessor:头像图片处理器,上传前把图片压缩为 JPEG。
  • RealNameImageProcessor:实名认证证件图片处理器,上传前把证件图压缩为 JPEG。
  • RemoteImageKingfisher 网络图片组件,统一远程图片加载、缓存和失败占位。

上传流程

  1. 页面或 ViewModel 将用户选择的本地图片处理成上传数据。
  2. ViewModel 调用 OSSUploadService 的业务上传方法。
  3. OSSUploadService 调用 UploadAPI.aliyunOSSBucket(bucket:) 获取 STS 配置。
  4. OSSUploadPolicy 校验文件并生成 objectKey。
  5. OSSUploadService 使用 AlibabaCloudOSS SDK 上传数据。
  6. 上传成功后返回 base_url + objectKey
  7. 业务 ViewModel 再把 URL 提交给对应业务接口。

路径规则

当前模块路径:

  • user_avataravatar/yyyyMMdd/scenicId/uuid_fileName
  • real_namereal_name/yyyyMMdd/scenicId/uuid_fileName
  • task_uploadtask_upload/yyyyMMdd/scenicId/uuid_fileName
  • cloud_drivercloud_driver/yyyyMMdd/scenicId/uuid_fileName
  • album_uploadalbum/yyyyMMdd/scenicId/uuid_fileName
  • alive_albumlive_albums/yyyyMMdd/scenicId/uuid_fileName
  • punch_pointpunch_point/yyyyMMdd/scenicId/uuid_fileName
  • scenic_applyscenic_apply/yyyyMMdd/scenicId/uuid_fileName

文件名会清理控制字符、/\,避免生成非法 objectKey。

缓存边界

  • OSS STS token 不落盘,只在一次上传流程中临时使用。
  • 原始图片 Data、压缩后图片 Data、上传进度不落盘。
  • 图片展示缓存交给 Kingfisher业务代码不自行保存网络图片文件。
  • 正式登录 token 仍由 SessionTokenStore 使用 Keychain 保存,上传模块不直接读取或保存登录态。