组件:文件选择框
文件选择框组件用于让用户从本地设备中选择一个或多个文件,支持多种文件类型过滤、多选、从摄像头/麦克风等媒体设备捕获(移动端),并提供了文件选择完毕的回调事件。它基于 HTML <input type="file"> 元素封装,适用于文件上传、图片选择、文档导入等需要用户选取文件的场景。
典型使用场景:
- 用户头像上传(选择图片)
- 文件上传(选择文档、压缩包等)
- 批量导入(选择 CSV、Excel 数据文件)
- 拍照/录像上传(移动端调用摄像头直接拍摄)
- 附件上传(邮件、工单、消息中的附件)
📌 继承自视图的成员速查
本组件继承自 视图 类,可直接使用以下属性和方法:
属性: ID、左边、顶边、右边、底边、宽度、高度、背景、背景颜色、背景图像、文本、文本颜色、字体、字体大小、字体粗细、行高、边框、边框圆角、边框宽度、光标样式、显示模式、透明度、外边距、外边距底、外边距左、外边距右、外边距顶、最大高度、最大宽度、最小高度、最小宽度、内边距、内边距底、内边距左、内边距右、内边距顶、定位、CLASS、InnerHTML、OuterHTML、内容水平对齐方式、首行缩进、可视、显示层级、内联样式、禁用
方法: 追加内联样式(样式文本)、置内联样式(名称,值)、取内联样式值(名称)、取Style对象()、添加事件(事件名称, 回调函数)、删除事件(事件名称, 回调函数)、获取焦点()、清除焦点()、添加样式类(类名称)、移除样式类(类名称)、取样式类列表()、取样式类()、执行单击()、取属性值(属性名)、取属性节点(属性名)、取布局参数()、取渲染宽度()、取渲染高度()、取渲染顶边()、取渲染左边()、左侧对齐到(目标组件,偏移量)、右侧对齐到(目标组件,偏移量)、顶边对齐到(目标组件,偏移量)、底边对齐到(目标组件,偏移量)、右侧对齐到左(目标组件, 偏移量)、左侧对齐到右(目标组件, 偏移量)、底边对齐到顶(目标组件, 偏移量)、顶边对齐到底(目标组件, 偏移量)、有指定属性(属性名)、有属性()、内容可编辑()、包含CSS类(类名)、取命名空间()、取下个节点()、取下个元素()、取节点名称()、取节点类型()、取父节点()、取父元素()、取上个节点()、取上个元素()、销毁()、删除属性(属性名)、删除属性节点(属性名)、置属性值(属性名, 属性值)、置属性节点(属性节点)、取标签名()、移动(左边 顶边, 宽度, 高度)、取原生对象()、置被单击回调(回调函数)、置被双击回调(回调函数)、置鼠标被进入回调(回调函数)、置鼠标被移出回调(回调函数)、置鼠标被移动回调(回调函数)、置鼠标被按下回调(回调函数)、置鼠标被抬起回调(回调函数)、置鼠标滚轮被滚动回调(回调函数)、置键盘被按下回调(回调函数)、置按键被抬起回调(回调函数)、置按键被压下回调(回调函数)、置被失去焦点回调(回调函数)、置被获得焦点回调(回调函数)
事件: 被单击(源对象,事件源)、被双击(源对象,事件源)、鼠标被进入(源对象,事件源)、鼠标被移出(源对象,事件源)、鼠标被移动(源对象,事件源)、鼠标被按下(源对象,事件源)、鼠标被抬起(源对象,事件源)、鼠标滚轮被滚动(源对象,事件源)、键盘被按下(源对象,事件源)、按键被抬起(源对象,事件源)、按键被压下(源对象,事件源)、被失去焦点(源对象,事件源)、被获得焦点(源对象,事件源)
💡 完整成员列表及详细说明请参考:
视图类
常用操作速查
| 操作 | 属性/方法 | 示例 |
|---|---|---|
| 启用/禁多选 | 多选 | 文件选择框1.多选 = 真 |
| 限制文件类型 | 接受类型 | 文件选择框1.接受类型 = "image/*" |
| 设置按钮文本 | 按钮文本 | 文件选择框1.按钮文本 = "选择图片" |
| 禁用/启用组件 | 禁用 | 文件选择框1.禁用 = 真 |
| 获取所有已选文件 | 取文件列表() | 变量 文件列表 = 文件选择框1.取文件列表() |
| 获取指定索引的文件 | 取文件(索引) | 变量 文件对象 = 文件选择框1.取文件(0) |
| 清空已选文件 | 清空() | 文件选择框1.清空() |
| 设置选择完成回调 | 置文件选择完毕回调(回调函数) | 文件选择框1.置文件选择完毕回调((源对象, 文件列表) => { ... }) |
样式美化参考
文件选择框的外观主要通过继承的视图属性和 CSS 类进行美化:
- 整体容器:通过
宽度、高度、背景颜色、边框(如"1px solid #d9d9d9")、边框圆角(建议"6px")等属性美化。 - 按钮文本:
按钮文本设置显示在按钮上的文字,默认"选择文件"。按钮样式由组件内部控制,但可通过 CSS 类覆盖背景色、文字颜色等。 - 文件列表显示:组件本身不显示已选文件列表,需通过回调自行处理显示逻辑。
- 禁用状态:
禁用 = 真时,按钮变灰且不可点击。
CSS 美化示例(在项目 CSS 文件中定义):
.my-file-input {
border: 1px solid #d9d9d9;
border-radius: 6px;
padding: 4px 8px;
font-size: 14px;
background-color: #ffffff;
transition: border-color 0.3s;
}
.my-file-input:hover {
border-color: #1890ff;
}
.my-file-input:disabled {
background-color: #f5f5f5;
cursor: not-allowed;
}
在代码中应用样式类:文件选择框1.添加样式类("my-file-input")
基础示例
创建一个文件选择框,仅接受图片类型,支持多选,选择后输出文件信息。
变量 文件选择框1 = 创建 文件选择框()
文件选择框1.左边 = 50
文件选择框1.顶边 = 50
文件选择框1.宽度 = 160
文件选择框1.高度 = 36
文件选择框1.按钮文本 = "选择图片"
文件选择框1.接受类型 = "image/*"
文件选择框1.多选 = 真
文件选择框1.边框 = "1px solid #d9d9d9"
文件选择框1.边框圆角 = "6px"
文件选择框1.背景颜色 = "#ffffff"
文件选择框1.置文件选择完毕回调((源对象, 文件列表) => {
变量 数量 = 取数组成员数(文件列表)
调试输出("选择了 " + 数量 + " 个文件")
变量循环(i = 0, 数量, 1)
变量 文件 = 文件列表[i]
调试输出("文件 " + (i+1) + ":" + 文件.name + ",大小:" + 文件.size + " 字节")
结束循环
})
添加组件(文件选择框1)
综合示例:头像上传与预览
本示例构建一个头像上传功能,用户选择图片后立即显示预览,并展示文件信息,同时提供“上传”和“清除”按钮。
' ========== 创建布局 ==========
变量 主容器 = 创建 弹性布局()
主容器.方向 = "column"
主容器.宽度 = 400
主容器.左边 = 50
主容器.顶边 = 30
主容器.间距 = 12
添加组件(主容器)
' 标题
变量 标题 = 创建 标签()
标题.文本 = "👤 头像上传"
标题.字体大小 = "20px"
标题.字体粗细 = "bold"
主容器.添加组件(标题)
' 头像预览区域
变量 预览容器 = 创建 弹性布局()
预览容器.方向 = "row"
预览容器.侧轴对齐 = "center"
预览容器.主轴对齐 = "center"
预览容器.宽度 = 120
预览容器.高度 = 120
预览容器.背景颜色 = "#f0f0f0"
预览容器.边框 = "1px dashed #d9d9d9"
预览容器.边框圆角 = "60px" ' 圆形
预览容器.溢出隐藏 = "hidden"
主容器.添加组件(预览容器)
变量 预览图片 = 创建 图片框()
预览图片.图片宽度 = 120
预览图片.图片高度 = 120
预览图片.图片显示模式 = "cover"
预览图片.替代文本 = "头像预览"
预览容器.添加组件(预览图片)
' 文件选择框
变量 文件选择框1 = 创建 文件选择框()
文件选择框1.宽度 = 160
文件选择框1.高度 = 36
文件选择框1.按钮文本 = "选择图片"
文件选择框1.接受类型 = "image/*"
文件选择框1.多选 = 假
文件选择框1.边框 = "1px solid #1890ff"
文件选择框1.边框圆角 = "6px"
主容器.添加组件(文件选择框1)
' 文件信息标签
变量 信息标签 = 创建 标签()
信息标签.文本 = "未选择文件"
信息标签.字体大小 = "14px"
信息标签.文本颜色 = "#999"
主容器.添加组件(信息标签)
' 操作按钮组
变量 按钮组 = 创建 弹性布局()
按钮组.方向 = "row"
按钮组.间距 = 12
主容器.添加组件(按钮组)
变量 上传按钮 = 创建 按钮()
上传按钮.文本 = "上传"
上传按钮.宽度 = 80
上传按钮.高度 = 32
上传按钮.背景颜色 = "#52c41a"
上传按钮.文本颜色 = "#ffffff"
上传按钮.边框圆角 = "6px"
上传按钮.禁用 = 真
按钮组.添加组件(上传按钮)
变量 清除按钮 = 创建 按钮()
清除按钮.文本 = "清除"
清除按钮.宽度 = 80
清除按钮.高度 = 32
清除按钮.背景颜色 = "#d9d9d9"
清除按钮.文本颜色 = "#333"
清除按钮.边框圆角 = "6px"
清除按钮.禁用 = 真
按钮组.添加组件(清除按钮)
' ========== 事件绑定 ==========
' 选择文件回调
文件选择框1.置文件选择完毕回调((源对象, 文件列表) => {
如果(取数组成员数(文件列表) > 0)
变量 文件 = 文件列表[0]
' 显示文件信息
信息标签.文本 = "已选:" + 文件.name + "(" + 文件.size + " 字节)"
' 预览图片(通过创建临时URL)
变量 图片URL = URL.createObjectURL(文件)
预览图片.图片 = 图片URL
预览图片.替代文本 = 文件.name
' 启用按钮
上传按钮.禁用 = 假
清除按钮.禁用 = 假
否则
信息标签.文本 = "未选择文件"
预览图片.图片 = ""
上传按钮.禁用 = 真
清除按钮.禁用 = 真
结束 如果
})
' 上传按钮
上传按钮.置被单击回调((源对象) => {
变量 文件列表 = 文件选择框1.取文件列表()
如果(取数组成员数(文件列表) == 0)
弹出提示("请先选择图片")
返回
结束 如果
变量 文件 = 文件列表[0]
' 模拟上传
上传按钮.禁用 = 真
上传按钮.文本 = "上传中..."
延时执行(() => {
上传按钮.禁用 = 假
上传按钮.文本 = "上传"
弹出提示("上传成功:" + 文件.name)
}, 1500)
})
' 清除按钮
清除按钮.置被单击回调((源对象) => {
文件选择框1.清空() ' 清空已选文件
预览图片.图片 = ""
信息标签.文本 = "未选择文件"
上传按钮.禁用 = 真
清除按钮.禁用 = 真
弹出提示("已清除")
})
属性详解
多选
- 类型:
逻辑型 - 说明: 设置或获取是否允许用户一次选择多个文件。当为
真时,文件选择对话框中可按住 Ctrl 或 Shift 键选择多个文件。默认假。
接受类型
- 类型:
文本型 - 说明: 设置或获取允许选择的文件类型,用于过滤文件对话框中的可选文件。支持以下格式:
- MIME 类型:如
"image/png"、"application/pdf" - 通配符:如
"image/*"(所有图片)、"audio/*"(所有音频) - 文件扩展名:如
".doc"、".xlsx" - 多个值用逗号分隔:如
"image/*,.pdf,.doc"默认为空(允许所有文件类型)。
- MIME 类型:如
调用源
- 类型:
文本型 - 说明: 设置或获取媒体捕获源,主要用于移动端设备,可让用户直接从摄像头或麦克风捕获媒体。可选值:
"user":使用前置摄像头(自拍)"environment":使用后置摄像头 通常与接受类型配合使用,如接受类型 = "image/*"且调用源 = "environment"时,会弹出拍照选项。 默认为空(使用系统默认文件选择器)。
禁用
- 类型:
逻辑型 - 说明: 设置或获取是否禁用组件。禁用后,按钮不可点击,样式变灰。默认
假。
按钮文本
- 类型:
文本型 - 说明: 设置或获取选择按钮上显示的文本。默认
"选择文件"。可以自定义为更符合场景的文字,如"选择图片"、"上传文档"等。
函数详解
取文件列表()
- 功能: 获取当前已选择的所有文件列表。
- 返回值: 数组,包含
File对象(每个文件包含name、size、type、lastModified等属性)。若未选择任何文件,返回空数组[]。 - 示例:
变量 文件列表 = 文件选择框1.取文件列表() 变量循环(i = 0, 取数组成员数(文件列表), 1) 变量 文件 = 文件列表[i] 调试输出("文件名:" + 文件.name) 结束循环
取文件(索引)
- 功能: 获取指定索引位置的文件对象。
- 参数:
索引(数值型),从 0 开始。若省略索引,则默认取第一个文件(索引 0)。 - 返回值:
File对象,如果索引无效则返回空。 - 示例:
变量 文件 = 文件选择框1.取文件(0)
清空()
- 功能: 清空当前已选择的文件列表,重置组件状态。调用后,界面上的文件选择按钮会恢复为未选择状态,且触发回调(文件列表为空)。
- 返回值: 无。
- 示例:
文件选择框1.清空()
置文件选择完毕回调(回调函数)
- 功能: 设置当用户完成文件选择(点击“确定”按钮)时的回调函数。无论选择了一个还是多个文件,都会触发。
- 参数:
回调函数,格式为(源对象, 文件列表) => { ... }。源对象:文件选择框组件本身。文件列表:包含已选文件的数组(File对象列表)。
- 返回值: 无。
- 示例:
文件选择框1.置文件选择完毕回调((源对象, 文件列表) => { 弹出提示("选择了 " + 取数组成员数(文件列表) + " 个文件") })
事件说明
文件选择完毕(源对象, 文件列表)
- 功能: 与
置文件选择完毕回调等效,适用于设计文件(.spldg)中定义的组件。 - 示例:
事件 文件选择框1.文件选择完毕(源对象, 文件列表) 调试输出("已选文件数:" + 取数组成员数(文件列表)) 结束 事件
⚠️ 注意事项
- 文件对象属性:
File对象包含name(文件名)、size(字节大小)、type(MIME 类型)、lastModified(最后修改时间戳)等属性,可在回调中直接使用。 - 多选模式:设置
多选 = 真后,用户可一次选择多个文件,取文件列表()返回数组;若多选 = 假,则只允许选择一个文件,但取文件列表()仍然返回数组(长度为 1)。 - 文件类型过滤:
接受类型只是前端提示,用户仍可切换为“所有文件”绕过限制,后端需再次校验。 - 调用源(capture):在移动端且支持的情况下,设置
调用源后,文件选择器会直接打开相机/麦克风,而不显示文件列表。建议搭配接受类型使用。 - 清空行为:调用
清空()会重置文件选择框,但不会自动触发回调。如需在清空后执行逻辑,可手动调用回调处理。 - 预览图片:可使用
URL.createObjectURL(文件)生成临时 URL 用于图片预览,但需注意内存释放(调用URL.revokeObjectURL(url))。 - 文件大小:
文件.size以字节为单位,可转换为 KB/MB 显示。 - 禁用状态:
禁用 = 真时,按钮不可用,但仍然可以通过代码调用取文件列表()等方法获取之前选择的结果(如果有)。 - 事件触发时机:
置文件选择完毕回调在用户点击“确定”后触发,若用户取消选择,则不会触发回调。
相关文档
- 文档
框架基础类_视图—— 视图类提供的所有通用属性和方法 - 文档
图像类组件_图片框—— 配合预览图片 - 文档
轻语言网站:轻语言语法速查—— 拉姆达表达式、数组操作等 - 文档
综合演示:头像上传与预览—— 实际应用示例