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

28 lines
2.0 KiB
Markdown
Raw 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.

### `lib/background-uploader` 模块概要
该模块负责将用户设备中的媒体文件(图片和视频)上传到服务器,并支持后台处理。
**核心功能:**
* **媒体选择:** 从设备的媒体库中获取指定日期范围内的照片和视频(见 `media.ts`),同时获取相关的元数据,如 EXIF 和位置信息。
* **文件处理:**
* 处理 `HEIC` 格式图片转为 `JPEG` 格式(见 `fileProcessor.ts`)。
* 将图片压缩到标准的宽高和质量(见 `fileProcessor.ts`)。
* 对于视频,提取首帧、压缩后作为缩略图上传(见 `fileProcessor.ts`)。
* **API 交互:**
* 与后端服务器通信,获取用于上传文件的安全临时 URL`api.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`)。
简而言之,这是一个为移动应用设计的、健壮高效的后台上传系统。