更新记录
1.0.3(2026-05-19)
修复打自定义基座,选择文件无效
1.0.1(2026-05-19)
修复安卓 bug Can only use lower 16 bits for requestCode
1.0(2026-05-19)
新增文件大小限制功能
新增扩展名和 MIME 类型过滤
查看更多
平台兼容性
uni-app(5.0)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| - |
- |
- |
- |
- |
- |
- |
- |
- |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| - |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
uni-app x(5.0)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| - |
- |
- |
- |
- |
- |
d-file-picker
uni-app x 原生文件选择器插件,支持多平台文件选择功能。
平台支持
| 平台 |
实现方式 |
最低版本要求 |
| App-Android |
ActivityResultLauncher + SAF |
Android 5.0 (API 21) |
| App-iOS |
UIDocumentPickerViewController |
iOS 14.0 |
| Web |
<input type="file"> |
- |
| 微信小程序 |
wx.chooseMessageFile |
- |
安装
插件已内置在项目中,通过 @/uni_modules/d-file-picker 导入使用。
⚠️ 注意事项
- CLI 创建的项目不支持:通过
vue create 或 cli 命令行创建的 uni-app 项目不支持使用 UTS 插件,请使用 HBuilderX 创建或导入项目。
- 自定义基座说明:
- 普通版 uni-app x 和 uni-app:必须打包自定义运行基座才能调用 UTS 插件的原生功能
- 源码版 uni-app x(即
-S 模式):无需打包自定义基座,可直接运行调试
- App 端 UTS 插件的原生代码在标准基座中不会生效,控制台会提示相关警告,属于正常现象。
使用
import { pickFile } from '@/uni_modules/d-file-picker'
pickFile({
multiple: true,
extensions: ['jpg', 'png', 'pdf'],
mimeTypes: ['image/*', 'application/pdf'],
maxSize: 10 * 1024 * 1024,
success: (res) => {
console.log('选择了', res.files.length, '个文件')
for (const f of res.files) {
console.log(f.name, f.size, f.mimeType)
}
},
fail: (err) => {
console.error('选择失败:', err.errCode, err.errMsg)
},
complete: (res) => {
console.log('选择操作完成')
},
})
API
pickFile(options)
PickFileOptions
| 参数 |
类型 |
必填 |
默认值 |
说明 |
| multiple |
boolean |
否 |
false |
是否允许多选 |
| maxSize |
number |
否 |
0 |
文件大小限制(字节),0 表示不限制 |
| extensions |
string[] |
否 |
- |
允许的文件扩展名列表(如 ['jpg', 'png']) |
| mimeTypes |
string[] |
否 |
- |
允许的 MIME 类型列表(如 ['image/*']),优先级高于 extensions |
| success |
(res) => void |
否 |
- |
选择成功回调 |
| fail |
(err) => void |
否 |
- |
选择失败回调 |
| complete |
(res) => void |
否 |
- |
操作完成回调(成功或失败都会触发) |
PickFileSuccess
| 字段 |
类型 |
说明 |
| files |
FileInfo[] |
文件信息列表 |
| errMsg |
string |
成功消息('pickFile:ok') |
FileInfo
| 字段 |
类型 |
说明 |
| path |
string |
文件路径 |
| name |
string |
文件名 |
| size |
number |
文件大小(字节) |
| mimeType |
string |
MIME 类型 |
| createdTime |
number |
创建时间戳(ms) |
| modifiedTime |
number |
修改时间戳(ms) |
错误码
| 错误码 |
说明 |
| 9020001 |
用户取消选择 |
| 9020005 |
选择文件失败 |
| 9020006 |
文件不符合限制条件(大小/类型) |
平台差异
Android
- 使用
ACTION_OPEN_DOCUMENT Intent,通过 SAF(Storage Access Framework)选择文件
- 选中的文件会被复制到应用缓存目录,返回本地缓存路径
- 需要
androidx.activity:activity:1.8.0 依赖
- 自动声明
android.permission.READ_EXTERNAL_STORAGE 权限(由 SAF 授予的 URI 临时权限实际已够用,该权限仅用于兼容极端情况)
iOS
- 使用
UIDocumentPickerViewController(iOS 14+),asCopy: true 模式
- 文件自动复制到临时目录,返回本地路径
- 仅能浏览文件 App 中的内容,无法选择相册图片(需使用 PHPickerViewController)
Web
- 使用
<input type="file"> 实现
- 返回
URL.createObjectURL 创建的临时 URL
- 支持 accept 属性过滤
微信小程序
- 使用
wx.chooseMessageFile API
- 仅能选择聊天记录中的文件
- 注意:不支持 MIME 类型过滤
开发
# 目录结构
uni_modules/d-file-picker/
├── package.json
├── README.md
├── CHANGELOG.md
└── utssdk/
├── interface.uts # 类型定义
├── unierror.uts # 错误处理
├── app-android/
│ ├── config.json # Android 依赖配置
│ ├── index.uts # Android UTS 桥接
│ └── DFResolver.kt # Android 原生实现
├── app-ios/
│ ├── config.json # iOS 框架配置
│ ├── index.uts # iOS UTS 桥接
│ └── DFResolver.swift # iOS 原生实现
├── web/
│ └── index.uts # Web 实现
└── mp-weixin/
└── index.uts # 微信小程序实现
许可
MIT