28 lines
2.0 KiB
Markdown
28 lines
2.0 KiB
Markdown
### `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`)。
|
||
|
||
简而言之,这是一个为移动应用设计的、健壮高效的后台上传系统。 |