更新记录
1.0.0(2026-09-27)
- 首发版本
- 三端(Android/iOS/HarmonyOS)媒体枚举:图片/视频/音频分类浏览
- Android 10+ 免权限(MediaStore);iOS/鸿蒙自动申请相册权限
- 深色系好看 UI:分类 Tab、搜索、网格多选、时长角标、已选计数
- 静态 API:requestMediaPermission / getMediaList / loadThumb / copyToApp / copyToAppBatch
- 统一错误码 9002001-9002006
平台兼容性
uni-app x(4.21)
| Chrome |
Safari |
Android |
Android插件版本 |
iOS |
iOS插件版本 |
鸿蒙 |
鸿蒙插件版本 |
微信小程序 |
| - |
- |
√ |
1.0.0 |
√ |
1.0.0 |
√ |
1.0.0 |
- |
文件选择器·媒体浏览器(mj-file-picker)
支持 uni-app x(App 端:Android / iOS / HarmonyOS)的免权限媒体文件浏览与多选组件。
- Android:基于 MediaStore 枚举全部文件(图片/视频/音频/文档等),自动申请媒体读取权限(targetSdk≥33 申请 READMEDIA*,否则 READ_EXTERNAL_STORAGE);AOSP Android 10+ 免权限即可全量枚举,华为鸿蒙等厂商系统需授予存储权限后返回全量
- iOS:基于 Photos 框架枚举相册(需相册权限,插件自动申请)
- 鸿蒙:基于 photoAccessHelper 枚举相册(需相册权限,插件自动申请)
- 自带深色系好看 UI:分类 Tab(全部/图片/视频/音频/文件)、搜索、网格浏览、时长角标、滚动分页加载
- 点击文件直接预览:图片大图 / 视频播放 / 音频与文档信息卡片,无需“勾选-确认”流程
- 提供静态 API:枚举 / 缩略图 / 复制到应用沙盒,可完全脱离组件使用
快速使用(组件方式)
<mj-file-picker type="all" @preview="onPreview"></mj-file-picker>
import { FileInfo } from "../../uni_modules/mj-file-picker/utssdk/interface.uts"
function onPreview(item: FileInfo) {
// 点击文件时触发(组件内部同时弹出预览层)
}
| 属性 |
类型 |
默认值 |
说明 |
| type |
string |
'all' |
浏览类型:all / image / video / audio / file(file=仅文档等非媒体文件) |
| showSearch |
boolean |
true |
是否显示搜索框 |
| safeArea |
boolean |
false |
组件独立贴顶时预留状态栏高度 |
| 事件 |
参数 |
说明 |
| preview |
FileInfo |
点击文件预览时触发 |
静态 API(不依赖组件)
import { requestMediaPermission, getMediaList, loadThumb, copyToApp, copyToAppBatch } from "@/uni_modules/mj-file-picker"
// 1. 请求权限(Android 直接回调 true)
requestMediaPermission((granted: boolean) => {})
// 2. 枚举媒体文件
getMediaList({ type: "image", limit: 500, copyToApp: false }, (files: Array<FileInfo>) => {
}, (err: PickerFail) => {
})
// 3. 生成缩略图(返回本地图片路径,可直接用于 image 组件)
loadThumb(item.uri, 512, (path: string) => {
})
// 4. 复制到应用沙盒(返回真实文件路径,可读可编辑)
copyToApp(item.uri, "picker", (path: string) => {
})
// 5. 批量复制
copyToAppBatch(uris, "picker", (paths: Array<string>) => {
})
FileInfo 字段
| 字段 |
类型 |
说明 |
| id |
string |
平台唯一标识 |
| name |
string |
文件名(iOS 为 IMG_+ID 前缀) |
| uri |
string |
平台 uri(content:// 或 ph://),传给 loadThumb/copyToApp |
| path |
string |
复制到应用目录后的真实路径 |
| size |
number |
字节数(iOS 暂不可用为 0) |
| mimeType |
string |
MIME 类型 |
| type |
'image' | 'video' | 'audio' | 'file' |
媒体类型(file=非媒体文件) |
| modifiedTime |
number |
修改时间(毫秒) |
| duration |
number |
时长(毫秒,视频/音频) |
| width / height |
number |
宽高(像素,图片/视频) |
错误码
| 错误码 |
说明 |
| 9002001 |
媒体枚举失败 |
| 9002002 |
相册权限被拒绝 |
| 9002003 |
缩略图生成失败 |
| 9002004 |
文件复制失败 |
| 9002005 |
uri 无效 |
| 9002006 |
参数错误 |
兼容性与权限声明
- 仅支持 uni-app x(App 端),不支持 uni-app(vue)、web、小程序
- Android:Android 5.0+。应用需声明媒体读取权限:targetSdk≥33 声明 READ_MEDIA_IMAGES/READ_MEDIA_VIDEO/READ_MEDIA_AUDIO;targetSdk<33 声明 READ_EXTERNAL_STORAGE(插件已自带 AndroidManifest.xml 权限声明,随插件合入应用)。AOSP Android 10-12 实际枚举无需授权,但华为鸿蒙等厂商系统未授权时 MediaStore 只返回应用自有的媒体文件,务必调用 requestMediaPermission 申请并获授权后再枚举
- iOS:iOS 12+,需相册权限(NSPhotoLibraryUsageDescription),插件自动申请
- 鸿蒙:需相册权限(ohos.permission.READ_IMAGEVIDEO),插件自动申请;鸿蒙相册仅图片/视频,"文件"类型返回空
- iOS 端 copyToApp 仅支持图片原图导出(视频/音频暂仅浏览);"文件"类型 iOS 相册无此概念返回空
- 插件不采集任何数据、无任何网络请求
试用
- 该插件已开通“自定义基座试用”,开发者可在 manifest 勾选插件后运行到自定义基座试用
- 试用期可完整体验全部功能