更新记录
1.0.0(2026-08-11)
- 首发 x-filepick
- Android SAF + iOS UIDocumentPicker
- 多选 / preset / copyToCache / persistPermission
- 对标 sn-uts-file 并补齐双端与元数据
平台兼容性
uni-app
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(4.27)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 5.0 | 14 | × | × |
x-filepick
uni-app x 零权限系统文件选择 UTS 插件(Android + iOS)。
对标 sn-uts-file #14309 的「系统选择器 + 零权限」思路,并按业界高星方案补齐双端、多选、元数据与本地副本。
相对 #14309 的差异
| 能力 | sn-uts-file (14309) | x-filepick |
|---|---|---|
| 平台 | 仅 Android | Android + iOS |
| API | pickerFile(mime, cb) |
Options:success / fail / complete |
| 多选 | 否 | 是(multiple + count) |
| 过滤 | 单 MIME | preset + mimeTypes + extensions |
| 返回 | 偏 path | name / size / mime / ext / uri / path |
| 本地副本 | 隐式/有限 | copyToCache(对齐 RN keepLocalCopy) |
| 持久 URI | 无 | Android persistPermission |
| 辅助 | 无 | getPickedFileInfo / toUploadFile / isSupported |
通用架构(调研结论)
详见 RESEARCH.md。核心共识:
- Android:
ACTION_OPEN_DOCUMENT(SAF)优于自建文件浏览器;零存储权限 - iOS:
UIDocumentPickerViewController(asCopy: true) - content:// / 临时 URL 不可长期持有 → 默认复制到应用 cache,返回
path供uni.uploadFile/ FFmpeg 等使用
高星参考:react-native-documents/document-picker ~1505⭐、rosuH/AndroidFilePicker ~1068⭐(后者为自建 UI,本插件刻意不采用)。
安装
放入 uni_modules/x-filepick,制作自定义调试基座后运行。
API
chooseFile(options)
import { chooseFile } from '@/uni_modules/x-filepick'
chooseFile({
preset: 'video', // all | image | video | audio | pdf | doc
// mimeTypes: ['application/pdf'],
// extensions: ['mp4', 'mov'],
multiple: false,
count: 9,
copyToCache: true,
persistPermission: false, // Android only
success(res) {
console.log(res.count, res.files[0].path, res.files[0].uri)
},
fail(err) {
console.log(err.errCode, err.errMsg) // 9040001 = 用户取消
}
})
getPickedFileInfo / toUploadFile / isSupported / getPluginVersion
见 utssdk/interface.uts。
错误码(904xxxx)
| code | 含义 |
|---|---|
| 9040001 | 用户取消 |
| 9040002 | 选择失败 |
| 9040003 | 平台不支持(Web) |
| 9040004 | 参数非法 |
| 9040005 | 复制/解析失败 |
权限与隐私
- 不申请
READ_EXTERNAL_STORAGE/READ_MEDIA_*/ 相册权限 - 仅访问用户在系统选择器中主动选中的文件
- 不上传、不采集
注意
- 改过 Kotlin/Swift 后需重新制作自定义基座
- 系统文件管理器对 MIME 过滤因 ROM 而异;
extensions会在结果侧再过滤 uri(尤其 Androidcontent://)为临时引用;上传/转码请用copyToCache: true得到的path- 可与本仓库
x-ffmpeg配合:选视频 →path→ 压缩/截帧
许可
业务代码随项目;无第三方运行时依赖(仅系统 API)。

收藏人数:
购买普通授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 553
赞赏 0
下载 12501684
赞赏 1941
赞赏
京公网安备:11010802035340号