更新记录

1.2.0(2026-07-09)

初始版本


平台兼容性

uni-app

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

uni-app x

Chrome Safari Android iOS 鸿蒙 微信小程序
- - 5.0 12 × -

nk-file-picker 文件选择器

一个基于 UTS 开发的原生文件选择插件,可以让用户选择手机上各种类型的文件并返回本地临时路径,方便后续上传或处理。

  • ✅ 支持类型:图片 / 视频 / 音频 / PDF / Word / Excel / PPT / 纯文本 / 压缩包 / 常用文档 / 全部类型
  • ✅ 支持自定义文件后缀白名单(如 dwgpsd
  • ✅ 支持多选
  • ✅ 同时兼容 AndroidiOS
  • ✅ 返回的临时路径可直接用于 uni.uploadFile

平台说明:Android 使用系统「存储访问框架 SAF」(ACTION_OPEN_DOCUMENT),iOS 使用系统文件选择器 UIDocumentPickerViewController,均为系统原生选择界面,无需额外后台权限。

一、引入插件

// 组合式写法
import { chooseFile } from '@/uni_modules/nk-file-picker'

或直接使用(UTS 插件会自动注册到 uni 命名空间视配置而定,推荐使用上面的 import 写法)。

二、API

chooseFile(options)

选择一个或多个文件。

options 参数

属性 类型 必填 默认值 说明
types ChooseFileType[] ['all'] 要选择的文件类型分类,可多选
extensions string[] - 自定义文件后缀白名单,用于扩展 types 未覆盖的格式
count number 1 最多可选择的文件数量,大于 1 时开启多选
success (res) => void - 选择成功回调
fail (res) => void - 选择失败/取消回调
complete (res) => void - 结束回调(成功或失败都会执行)

ChooseFileType 可选值

说明
all 所有类型文件(默认)
image 图片:png/jpg/gif/webp 等
video 视频:mp4/mov/avi 等
audio 音频:mp3/wav/aac 等
pdf PDF 文档
word Word:doc/docx
excel Excel:xls/xlsx
ppt PPT:ppt/pptx
text 纯文本:txt
zip 压缩包:zip/rar/7z
document 常用文档合集:pdf + word + excel + ppt + text

success 返回结果 ChooseFileSuccess

属性 类型 说明
tempFilePaths string[] 所有已选文件的临时路径数组
tempFiles ChooseFileItem[] 所有已选文件的详细信息数组

ChooseFileItem

属性 类型 说明
tempFilePath string 文件临时路径(本地缓存目录)
name string 文件名(含后缀)
size number 文件大小(字节)
extension string 文件后缀(小写,不含点,如 pdf)

错误码

errCode 说明
9010001 用户取消了选择
9010002 文件读取/复制失败
9010003 设备上无可用的文件管理器应用

三、使用示例

1. 选择任意类型文件

import { chooseFile } from '@/uni_modules/nk-file-picker'

chooseFile({
  success: (res) => {
    console.log('选择成功', res.tempFiles)
  },
  fail: (err) => {
    console.log('选择失败', err.errCode, err.errMsg)
  }
})

2. 只选择图片或视频

chooseFile({
  types: ['image', 'video'],
  success: (res) => {
    console.log(res.tempFilePaths)
  }
})

3. 选择常用文档(PDF / Word / Excel / PPT / txt)

chooseFile({
  types: ['document'],
  success: (res) => {
    res.tempFiles.forEach((f) => {
      console.log(f.name, f.extension, f.size)
    })
  }
})

4. 多选(最多 9 个)

chooseFile({
  types: ['image'],
  count: 9,
  success: (res) => {
    console.log('共选择了', res.tempFiles.length, '个文件')
  }
})

5. 自定义后缀

chooseFile({
  extensions: ['dwg', 'psd'],
  success: (res) => {
    console.log(res.tempFiles)
  }
})

6. 选择后上传

chooseFile({
  types: ['document'],
  success: (res) => {
    const file = res.tempFiles[0]
    uni.uploadFile({
      url: 'https://your-server.com/upload',
      filePath: file.tempFilePath,
      name: 'file',
      success: (uploadRes) => {
        console.log('上传成功', uploadRes)
      }
    })
  }
})

四、注意事项

  1. 本插件为 UTS 原生插件,仅在 App(Android / iOS)平台生效,需使用自定义基座运行/打包。
  2. count > 1 时开启多选:
    • iOS 系统文件选择器多选为「单击打勾」。
    • Android 在只选图片/视频types 仅含 image/video)且系统为 Android 13(API 33)+ 时,自动使用系统相册选择器 Photo Picker,多选为「单击打勾」;其它类型(PDF/Word/压缩包等)走系统文件管理器(SAF),其多选需长按进入多选模式,这是系统交互限制,非插件问题。
  3. iOS 会将所选文件复制到 uniapp 沙盒的 _doc/uniapp_temp/ 目录,返回相对路径,plus.io 可直接访问。
  4. Android 会将所选文件复制到应用外部缓存目录,返回绝对路径。

五、开发文档

六、更新日志

1.2.0

  • Android 端优化多选体验:只选图片/视频且系统为 Android 13+ 时,自动使用系统相册选择器 Photo Picker(单击即勾选多选)

1.1.0

  • 由「仅支持 PDF」升级为「支持选择各种类型文件」
  • 新增 chooseFile API,支持 types 分类、自定义后缀、多选
  • 返回结构升级为 tempFiles / tempFilePaths

1.0.0

  • 初始版本,支持选择 PDF 文件

隐私、权限声明

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

Android 使用存储访问框架(SAF)选择文件;为兼容读取媒体文件申请 READ_MEDIA_IMAGES/VIDEO/AUDIO 等权限。iOS 使用系统文件选择器 UIDocumentPickerViewController,无需额外权限。

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

插件仅在用户主动选择文件时读取所选文件并复制到应用缓存目录,不会收集、上传或分享任何用户数据。

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

暂无用户评论。