【uni-app x】1097 个文件秒开!免权限文件选择器:图片/视频/音频/文档一键浏览与预览

还在被"系统文件选择器"卡到怀疑人生?

做过媒体类 App 的同学都懂:

  • 相册里几千张照片,系统选择器一开就卡,滚动还掉帧
  • 想要"图片、视频、音频、文档"一起浏览?系统选择器只能选一类
  • 选中文件想先预览再决定?系统不给你这个机会
  • Android 10+ 说免权限,华为鸿蒙上却查不到几张照片,权限各种玄学

mj-file-picker 是一套基于 uni-app x + UTS 开发的三端(Android / iOS / HarmonyOS)文件浏览器组件,全量枚举 + 分页渲染 + 点击直接预览,实测华为真机 1097 个文件秒开。

功能清单

  • 🗂️ MediaStore 全量枚举:图片、视频、音频、文档(PDF/Office/APK 等)一次查全
  • 🏷️ 五个分类 Tab:全部 / 图片 / 视频 / 音频 / 文件,切换即过滤
  • 🔍 文件名搜索:秒级过滤
  • 🖼️ 点击直接预览:图片全屏大图、视频内置播放器播放、音频与文档信息卡片
  • ⚡ 分页渲染:首屏 24 个,滚动加载,万级文件也不卡
  • 🚀 缩略图并发限流:同时最多 6 个加载任务,不会黑屏/ANR
  • 🧩 静态 API:枚举 / 缩略图 / 复制到沙盒,可完全脱离组件

技术亮点(性能为什么这么猛)

  • 全量枚举只查一次:四路合并 Images + Video + Audio + Files 查询,分类切换复用缓存,不再重复查库(这是卡顿的最大来源)
  • 分页渲染:一次性渲染 500+ 项会导致 DOM 2495 个、onReady 75 秒——改造后 DOM 仅 79 个、onReady 1.7 秒
  • 缩略图限流:6 并发游标式加载,只处理已渲染范围,彻底解决渲染风暴
  • 鸿蒙权限适配:targetSdk≥33 自动申请 READ_MEDIA_*,否则 READ_EXTERNAL_STORAGE,授权后 MediaStore 返回全量(实测 10 → 1097 个文件)

接入有多简单?

<!-- pages/index/index.uvue -->
<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) {
	uni.showToast({ title: "预览 " + item.name, icon: "none" })
	// 组件内部已弹出预览层,这里可做业务埋点
}

引入 uni_modules 即用,标准基座即可体验。

兼容性

  • 仅支持 uni-app x(App 端)
  • Android 5.0+(10+ 免权限,鸿蒙需授权一次)/ iOS 12+ / HarmonyOS
  • 权限自动申请,不采集任何数据、无任何网络请求

插件链接:https://ext.dcloud.net.cn/plugin?name=mj-file-picker

无论是相册 App、企业文件管理还是内容创作工具,这个组件都能让你彻底告别系统选择器的卡顿和局限。觉得有用的话,点赞收藏,评论区聊聊你的场景。

在这里插入图片描述

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐