# 如何正确管理媒体资源

Media Library Kit（媒体文件管理服务）提供了媒体资源的管理能力，开发者可以访问和修改相册中的媒体信息。

Media Library Kit仅提供图片和视频的管理能力，不涉及音频文件的管理。

#### 媒体资源的常用路径表示

有多种路径形式来表示媒体资源，对应了不同的含义和使用场景，作为媒体资源的唯一标识，可在媒体资源管理过程中的部分媒体文件操作中被使用。

| 类型 | 形式 | 举例 | 说明 |
| --- | --- | --- | --- |
| URI | file://media/Photo/<ID>/<真实文件名(无后缀)>/<displayName> | 图片： file://media/Photo/111/IMG_1234567890_123/A.jpg 视频： file://media/Photo/222/VID_1234567890_321/B.mp4 | 字段定义与使用方式详见媒体文件URI。 |
| Path(媒体沙箱路径) | /data/storage/el2/media/Photo/<ID>/<真实文件名(无后缀)>/<displayName> | 图片： /data/storage/el2/media/Photo/111/IMG_1234567890_123/A.jpg 视频： /data/storage/el2/media/Photo/222/VID_1234567890_321/B.mp4 | 媒体沙箱路径用于三方应用访问媒体资源。 |
| 真实路径 | /storage/cloud/100/files/Photo/<所在桶目录>/<真实文件名> | 图片： /storage/cloud/100/files/Photo/1/IMG_1234567890_123.jpg 视频： /storage/cloud/100/files/Photo/2/VID_1234567890_321.mp4 | 媒体资源在设备文件系统内实际保存的位置。 |

#### 标准媒体文件操作流程

| 媒体文件操作 | 标准实现方式 |
| --- | --- |
| 获取 | 获取指定媒体资源 获取图片和视频缩略图 使用Picker选择媒体库资源 |
| 重命名 | 重命名媒体资源 |
| 保存到图库 | 保存媒体库资源 |
| 对用户相册内媒体文件进行操作 | 添加图片和视频到用户相册中 获取用户相册中的图片和视频 从用户相册中移除图片和视频 |

#### 常见问题

#### 能否通过修改生成或自行构造的媒体库路径来新增、删除、获取、重命名、移动文件或文件夹

不可以。因为媒体库URI和Path为虚拟路径，是通过组合媒体资源的部分属性来对媒体文件进行唯一标识，并非实际存在对应目录层级，也不存在真实的物理文件，需要通过媒体库内部的寻址方式才能进行有效的媒体文件操作。若使用修改生成或自行构造的媒体库路径对媒体文件进行操作，可能会造成非预期的文件操作结果。

以下是常见错误用法示例（以媒体库虚拟路径“/data/storage/el2/media/Photo/111/IMG\_1234567890\_123/A.jpg”为例）：

1.  截断生成的媒体路径。
    
    1.1 从路径尾部删除部分目录层级。例如：
    
    *   删除displayName部分：/data/storage/el2/media/Photo/111/IMG\_1234567890\_123/
    *   删除真实文件名 + displayName部分：/data/storage/el2/media/Photo/111/
    *   删除路径尾部的更多层级。
    
    以上得到的路径均为无效的媒体库目录，不能用来表示媒体资源父目录。
    
    1.2 删除路径中的某些目录层级。例如：
    
    *   删除真实文件名部分：/data/storage/el2/media/Photo/111/A.jpg
    *   删除ID部分：/data/storage/el2/media/Photo/IMG\_1234567890\_123/A.jpg
    *   删除其他目录层级。
    
    这些路径均为非法的媒体库目录，不能表示在某个目录层级下进行图片的新增或移动。
    
2.  修改生成的媒体路径。
    
    2.1 更改路径中的displayName。例如将“A.jpg”替换为“B.xxx”，得到“/data/storage/el2/media/Photo/111/IMG\_1234567890\_123/B.xxx”。这是一个非法的媒体库路径，不能表示在“原目录”下创建新文件“B.xxx”。
    
    2.2 更改路径中的ID。例如将路径中的ID从111替换为1111，得到“/data/storage/el2/media/Photo/1111/IMG\_1234567890\_123/A.jpg”。这也是一个非法的媒体库路径，不能作为将ID=111的“A.jpg”映射到另一个ID=1111的实现方式。
    
    2.3 更改路径中的其他目录层级。
    

上述通过截断、修改媒体库目录层级而构造出的路径，均为非法的媒体库路径。**如果针对这些非法路径使用增、删、改、查的相关接口（如fs.stat、fs.lstat、fs.access、fs.open、fs.close、fs.read、fs.write、fs.unlink等），均会造成非预期的结果。**

为确保正确性与稳定性，请务必通过标准媒体文件操作流程进行媒体文件管理。