uniapp中read_media_images和read_media_video如何使用
在uniapp中,read_media_images和read_media_video这两个API的具体使用方法是什么?需要配置哪些权限?调用后如何获取返回的图片或视频文件路径?是否有代码示例可以参考?在不同平台上(如Android和iOS)的使用是否存在差异?
2 回复
在uniapp中,read_media_images和read_media_video是用于读取用户相册图片和视频的API。
使用方法:
- 调用
uni.chooseMedia选择媒体文件 - 在success回调中获取tempFiles
- 通过
uni.getFileSystemManager().readFile读取文件内容
注意:需要用户授权相册权限,且不同平台支持度不同。
在 UniApp 中,read_media_images 和 read_media_video 是用于读取用户设备中图片和视频文件的 API,属于媒体文件管理功能。它们通常通过 UniApp 的扩展 API 或 原生插件 实现,因为 UniApp 本身的标准 API(如 uni.chooseImage)主要用于选择文件,而非直接读取设备存储中的媒体文件。以下是具体使用方法:
1. 使用前提
- 这些 API 不是 UniApp 官方标准 API,可能需要通过原生插件或条件编译(如使用 5+ API 或 Native.js)实现。
- 主要用于 App 端(Android/iOS),H5 和小程序端通常受沙盒限制,无法直接读取设备存储。
2. 使用步骤(以 App 端为例)
读取图片(read_media_images)
通过 plus.io 或文件系统 API 读取设备中的图片文件。示例代码:
// 使用 5+ API(需在 App 端运行)
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
fs.root.getDirectory("DCIM", { create: false }, function(dirEntry) {
var reader = dirEntry.createReader();
reader.readEntries(function(entries) {
entries.forEach(function(entry) {
if (entry.isFile && entry.name.match(/\.(jpg|png|gif)$/i)) {
console.log("图片文件:", entry.toURL()); // 获取文件 URL
// 可通过 entry.file() 读取文件数据
}
});
}, function(error) {
console.error("读取失败:", error);
});
});
});
读取视频(read_media_video)
类似图片读取,但过滤视频格式(如 mp4、mov):
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
fs.root.getDirectory("DCIM", { create: false }, function(dirEntry) {
var reader = dirEntry.createReader();
reader.readEntries(function(entries) {
entries.forEach(function(entry) {
if (entry.isFile && entry.name.match(/\.(mp4|mov|avi)$/i)) {
console.log("视频文件:", entry.toURL());
// 处理视频文件
}
});
});
});
});
3. 注意事项
- 权限问题:在 Android 上需在 manifest.json 中配置存储权限:
并在代码中动态申请权限(使用"permissions": { "Android": ["<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>"] }uni.authorize或 5+ API)。 - 路径限制:不同设备媒体存储路径可能不同(如 DCIM、Pictures 目录),需适配。
- 性能:大量文件读取可能阻塞 UI,建议分页或异步处理。
4. 替代方案
- 若只需选择文件(非读取存储),使用标准 API:
- 图片:
uni.chooseImage - 视频:
uni.chooseVideo
- 图片:
- 考虑使用社区插件(如 media-gallery)简化操作。
总结
直接读取设备媒体文件需依赖原生能力,建议优先使用 UniApp 标准选择 API。如需深度文件操作,请参考 5+ API 文档 或开发原生插件。

