更新记录

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 导入使用。

⚠️ 注意事项

  1. CLI 创建的项目不支持:通过 vue createcli 命令行创建的 uni-app 项目不支持使用 UTS 插件,请使用 HBuilderX 创建或导入项目。
  2. 自定义基座说明
    • 普通版 uni-app xuni-app:必须打包自定义运行基座才能调用 UTS 插件的原生功能
    • 源码版 uni-app x(即 -S 模式):无需打包自定义基座,可直接运行调试
  3. 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

隐私、权限声明

1. 本插件需要申请的系统权限列表:

FLAG_GRANT_READ_URI_PERMISSION

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。