更新记录
0.0.2(2026-03-30) 下载此版本
ai编写,不喜勿喷
平台兼容性
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
原生文件选择器插件,支持 Android、iOS、小程序和 Web 平台。
功能特性
- 跨平台支持:Android、iOS、微信小程序、H5
- 多选支持:可配置单选或多选模式
- 文件过滤:支持按扩展名或 MIME 类型过滤
- 大小限制:可设置最大文件大小限制
- 错误提示:选择不符合条件的文件时会显示 Toast 提示
- 统一返回格式:所有平台返回统一的数据结构
安装
方式一:uni_modules 导入(推荐)
- 将
d-file-picker文件夹复制到项目的uni_modules目录下 - 在 HBuilderX 中右键点击插件,选择"安装 uni_modules 插件依赖"
方式二:npm 安装(如有发布)
npm install d-file-picker
使用方法
基本用法
import { pickFile } from '@/uni_modules/d-file-picker'
pickFile({
success: (res) => {
console.log('选择的文件:', res.files)
// res.files 是 FileInfo 数组
},
fail: (err) => {
console.log('选择失败:', err.message)
}
})
多选模式
pickFile({
multiple: true, // 启用多选
success: (res) => {
res.files.forEach(file => {
console.log(file.name, file.size, file.path)
})
}
})
设置文件大小限制
pickFile({
maxSize: 10 * 1024 * 1024, // 10MB,单位:字节
success: (res) => {
console.log('文件符合大小限制')
},
fail: (err) => {
if (err.code === 9020006) {
console.log('文件超过大小限制')
}
}
})
按扩展名过滤
pickFile({
extensions: ['jpg', 'png', 'pdf'], // 只允许图片和 PDF
success: (res) => {
console.log('选择的文件:', res.files)
},
fail: (err) => {
if (err.code === 9020006) {
console.log('文件类型不允许')
}
}
})
按 MIME 类型过滤
pickFile({
mimeTypes: ['image/*', 'application/pdf'], // 图片和 PDF
success: (res) => {
console.log('选择的文件:', res.files)
}
})
完整配置示例
pickFile({
multiple: true, // 多选
maxSize: 5 * 1024 * 1024, // 最大 5MB
extensions: ['jpg', 'jpeg', 'png'], // 只允许图片
mimeTypes: ['image/*'], // MIME 类型过滤
success: (res) => {
uni.showToast({
title: `选择了 ${res.files.length} 个文件`,
icon: 'success'
})
},
fail: (err) => {
uni.showToast({
title: err.message,
icon: 'none'
})
},
complete: (res) => {
console.log('选择完成')
}
})
API 说明
PickFileOptions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| multiple | boolean | 否 | 是否多选,默认 false |
| maxSize | number | 否 | 最大文件大小(字节),0 表示不限制 |
| extensions | string[] | 否 | 允许的扩展名数组,如 ['jpg', 'png'] |
| mimeTypes | string[] | 否 | 允许的 MIME 类型数组,如 ['image/*'] |
| success | function | 否 | 成功回调 |
| fail | function | 否 | 失败回调 |
| complete | function | 否 | 完成回调(无论成功与否都会调用) |
FileInfo
| 属性 | 类型 | 说明 |
|---|---|---|
| path | string | 文件路径(file:// 或 content:// 等) |
| name | string | 文件名 |
| size | number | 文件大小(字节) |
| mimeType | string | MIME 类型 |
| createdTime | number | 创建时间戳 |
| modifiedTime | number | 修改时间戳 |
PickFileError
| 属性 | 类型 | 说明 |
|---|---|---|
| code | number | 错误码 |
| message | string | 错误信息 |
错误码说明
| 错误码 | 说明 |
|---|---|
| 9020001 | 用户取消选择 |
| 9020005 | 其他错误(无文件、无 activity 等) |
| 9020006 | 文件不符合限制(大小或类型) |
平台差异说明
Android
- 使用系统 DocumentsUI (ACTION_OPEN_DOCUMENT/ACTION_GET_CONTENT)
- content:// URI 会自动复制到应用缓存目录并转为 file:// 路径
- 不支持条件的文件选择时会显示 Toast 提示
iOS
- 使用 UIDocumentPickerViewController
- 支持扩展名到 UTType 的自动映射
- 返回原始文件路径
微信小程序
- 使用 wx.chooseMessageFile 或 wx.chooseMedia
- 受小程序平台能力限制
H5
- 使用原生
<input type="file"> - 返回 Blob URL 或 Data URL
注意事项
-
文件大小单位:
maxSize参数单位为字节(Bytes),常用换算:- 1 KB = 1024 Bytes
- 1 MB = 1024 * 1024 Bytes
-
扩展名格式:支持带点和无点的格式,
['jpg', '.jpg']效果相同 -
MIME 类型优先级:如果同时设置了
extensions和mimeTypes,Android 会优先使用mimeTypes -
Android 缓存文件:对于 content:// URI,插件会自动复制到缓存目录,路径格式为
file:///data/data/.../cache/picked_时间戳_文件名 -
权限说明:Android 会自动申请读取权限(FLAG_GRANT_READ_URI_PERMISSION)
示例项目
项目中的 pages/file-picker-demo.vue 提供了完整的使用示例,包括:
- 单选/多选切换
- 大小限制设置
- 扩展名过滤
- MIME 类型过滤
- 日志展示
版本历史
v0.0.2
- 新增文件大小限制功能
- 新增扩展名和 MIME 类型过滤
- 新增多选支持
- 优化错误提示(Toast)
v0.0.1
- 初始版本
- 基础文件选择功能
贡献
欢迎提交 Issue 和 Pull Request。
许可证
MIT

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 1
赞赏 0
下载 11694378
赞赏 1898
赞赏
京公网安备:11010802035340号