更新记录

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 导入(推荐)

  1. d-file-picker 文件夹复制到项目的 uni_modules 目录下
  2. 在 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

注意事项

  1. 文件大小单位maxSize 参数单位为字节(Bytes),常用换算:

    • 1 KB = 1024 Bytes
    • 1 MB = 1024 * 1024 Bytes
  2. 扩展名格式:支持带点和无点的格式,['jpg', '.jpg'] 效果相同

  3. MIME 类型优先级:如果同时设置了 extensionsmimeTypes,Android 会优先使用 mimeTypes

  4. Android 缓存文件:对于 content:// URI,插件会自动复制到缓存目录,路径格式为 file:///data/data/.../cache/picked_时间戳_文件名

  5. 权限说明:Android 会自动申请读取权限(FLAG_GRANT_READ_URI_PERMISSION)

示例项目

项目中的 pages/file-picker-demo.vue 提供了完整的使用示例,包括:

  • 单选/多选切换
  • 大小限制设置
  • 扩展名过滤
  • MIME 类型过滤
  • 日志展示

版本历史

v0.0.2

  • 新增文件大小限制功能
  • 新增扩展名和 MIME 类型过滤
  • 新增多选支持
  • 优化错误提示(Toast)

v0.0.1

  • 初始版本
  • 基础文件选择功能

贡献

欢迎提交 Issue 和 Pull Request。

许可证

MIT

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。