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