2025-07-17 15:44:34 +08:00

2.0 KiB
Raw Blame History

lib/background-uploader 模块概要

该模块负责将用户设备中的媒体文件(图片和视频)上传到服务器,并支持后台处理。

核心功能:

  • 媒体选择: 从设备的媒体库中获取指定日期范围内的照片和视频(见 media.ts),同时获取相关的元数据,如 EXIF 和位置信息。
  • 文件处理:
    • 处理 HEIC 格式图片转为 JPEG 格式(见 fileProcessor.ts)。
    • 将图片压缩到标准的宽高和质量(见 fileProcessor.ts)。
    • 对于视频,提取首帧、压缩后作为缩略图上传(见 fileProcessor.ts)。
  • API 交互:
    • 与后端服务器通信,获取用于上传文件的安全临时 URLapi.ts)。
    • 上传完成后与后端确认(见 api.ts)。
    • 文件及其预览/缩略图上传后,将元数据发送到另一个接口以创建“素材”记录(见 api.ts)。
  • 上传引擎:
    • 主要上传逻辑位于 index.ts,负责整体流程的编排:检查权限、处理文件、调用 API。
    • 使用并发限制(p-limit),防止同时上传过多文件,提高可靠性和性能。
    • 同时处理原始高质量文件和压缩版本(或视频缩略图)的上传。
  • 后台任务:
    • 可注册后台任务,定期(如每 15 分钟)自动上传过去 24 小时内的新媒体文件(见 task.ts)。
    • 即使应用不在前台,也能持续上传文件,提升无缝体验。
  • 工具与类型定义:
    • 包含用于检查媒体库权限、获取文件扩展名和 MIME 类型的辅助函数(见 utils.ts)。
    • 定义了自定义的 ExtendedAsset 类型,包含 exif 数据和标准的 MediaLibrary.Asset 属性(见 types.ts)。
    • 实际上传文件使用 XMLHttpRequest,以支持进度追踪,并通过 Promise 封装(见 uploader.ts)。

简而言之,这是一个为移动应用设计的、健壮高效的后台上传系统。