更新记录

1.0.1(2024-04-23) 下载此版本

更新文档

1.0.0(2024-04-22) 下载此版本

初版发布,提供两个示例


平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.1.0 app-vue × × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

calimanco-file-picker-x

一个用于 uni-app 框架的跨平台文件选择组件,可用于 Web、Android 和 iOS(未实测)。

使用

使用 HBuilder X 导入,在根目录即可运行 Demo。
提供两个示例:

  • 图片选择示例(包括自定义UI和各种事件演示)
  • 表格选择示例(可读 xlsx 文件,采用 ExcelJS 进行解析,默认UI)

特色

  • 纯 Web 实现,使用 WebView 原本的文件选择能力,无需原生支持,无需复杂权限;
  • 可获取到 base64 和 ArrayBuffer 两个类型数据,如果选择的是图片 base64 可直接回显;
  • 纯容器(逻辑)组件,纯净简单,UI 可自定义;
  • 支持多选;
  • 支持提供详细的读取进度响应;
  • 支持调用相机(需要手机支持);
  • 支持限定接受的文件类型(不同手机的响应可能不同);

原理

由于 uni-app 是类似小程序的实现,Input 标签已经被改写过,不支持 file,但实际渲染层依旧是 WebView,因此就有了在渲染层反过来构建 Input 的思路。
这是基于框架的 renderjs 实现,关于 renderjs 见 官方文档
在渲染层动态生成透明的 Input 覆盖在组件上,这就是本插件的基本原理。
其次由于 uni-app 的渲染层与逻辑层直接的通讯只能传递基本数据和简单 Object,无法传递有构造函数的数据,比如 ArrayBuffer,因此本插件还提供了通讯时数据的序列化和反序列化。

组件参数

参数 类型 说明 默认
accept String 与input标签属性相同,可接受的文件类型 *
capture String 与input标签属性相同,相机来源(前置/后置) environment
multiple Boolean 与input标签属性相同,是否支持多选 false
disabled Boolean 禁用,自定义UI需要自行处理样式 false

组件事件

事件 负载参数 说明
change IFile[] 选中文件时触发,此时未开始读取,只会提供基础信息
loadstart IFile[] 开始读文件时触发,多选时只会首文件触发
progress IFile[] 读文件时触发,可在 loaded 拿到进度
loadend IFile[] 结束读文件时触发,多选时只会末文件触发
success IFile[] 读取完成无错误,可拿到完整信息
fail Error 读取发生错误,可拿到错误信息
interface IFile {
    name: String  // 文件名
    size: Number  // 文件大小
    type: String  // 文件类型
    lastModified: Number  // 最后修改日期
    loaded: Number  // 已读取大小
    total: Number  // 总文件大小
    base64?: String  // base64编码字符串,仅在 success 事件有值
    arrayBuffer?: ArrayBuffer  // ArrayBuffer数据,仅在 success 事件有值
}

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问