27 lines
2.0 KiB
Markdown
27 lines
2.0 KiB
Markdown
此目录包含后台媒体上传的逻辑,包括 API 交互、自动和手动上传过程、媒体库访问以及实用功能。
|
||
|
||
**主要组件:**
|
||
|
||
- `api.ts`:处理与文件上传相关的 API 调用,例如获取上传 URL、确认上传和添加素材记录。
|
||
- `automatic.ts`:实现后台任务的注册和定义,用于自动媒体上传,通常定期运行(例如,每 15 分钟)。它获取最近的媒体并处理它们以上传。
|
||
- `manual.ts`:提供在指定日期范围内手动触发媒体上传的功能,并带有并发控制。
|
||
- `media.ts`:管理与设备媒体库的交互(使用 `expo-media-library`),包括请求权限、获取带有 EXIF 数据的资产以及按日期范围过滤。
|
||
- `types.ts`:定义后台上传模块中使用的 TypeScript 接口和类型,包括 `ExtendedAsset`、`UploadTask`、`ConfirmUpload` 和 `UploadUrlResponse`。
|
||
- `uploader.ts`:包含处理和上传单个媒体文件的核心逻辑。这包括处理 HEIC 转换、图像压缩、视频缩略图生成、重复检查以及与上传 API 的交互。它还包括一个 `uploadFileWithProgress` 函数,用于跟踪上传进度。
|
||
- `utils.ts`:提供实用功能,例如检查媒体库权限、提取文件扩展名和确定 MIME 类型。
|
||
|
||
**整体功能:**
|
||
|
||
`background-uploader` 模块使应用程序能够:
|
||
1. 在后台**自动上传**新创建的媒体文件(照片和视频)。
|
||
2. 允许在指定日期范围内**手动上传**媒体文件。
|
||
3. 在上传前**处理媒体文件**,包括:
|
||
* 将 HEIC 图像转换为 JPEG。
|
||
* 压缩图像。
|
||
* 为视频生成缩略图。
|
||
4. **与后端 API 交互**以管理上传生命周期(获取 URL、上传、确认)。
|
||
5. **管理媒体库权限**并获取带有详细 EXIF 信息的媒体资产。
|
||
6. 通过检查本地数据库**防止重复上传**。
|
||
7. 提供上传的**进度跟踪**。
|
||
|
||
该模块通过必要的预处理和错误处理,确保高效、可靠的媒体上传,无论是自动还是按需上传。 |