上传文件重命名
需求
在文件上传时自动按照指定的格式更改文件名,方便批量下载识别。 例如:近期要统计疫苗接种情况,想按照“人名+日期”的格式来重命名上传的图片。
实现思路
在附件上传的 onSelect
方法中修改选中的文件名。
caution
目前在数据详情页下载单一文件还是原来的文件名
实现过程
步骤1:创建组件
- 创建一个单行文本组件,设置默认值为“公式编辑”,并在公式编辑窗口输入如下公式。
{"text":"LOGINUSER()","marks":[],"isCmData":true}
文本组件ID:textField_l0ujih8w
- 创建一个日期组件,设置默认值为“公式编辑”,并在公式编辑窗口输入如下公式。
{"text":"TIMESTAMP(SYSTIME())","marks":[],"isCmData":true}
日期组件ID:dateField_l0ujuwur
- 创建一个图片上传组件(图片上传组件和附件上传组件同理)。
图片组件ID:imageField_l0ujuwuq
步骤2:在图片组件的 onSelect 方法中写入代码
选中图片组件,在右侧“高级”选项卡中新建动作,选择 onSelect
在 JS 面板中输入如下代码
export function onSelect(files, array) {
// 获取人名
const name = this.$('textField_l0ujih8w').getValue()
// 获取日期
const date = this.utils.formatter('date', this.$('dateField_l0ujuwur').getValue(), 'YYYY-MM-DD');
array.map((file, index) => {
// 生成新文件名
file.name = file.name.replace(/^.*(\.\w+)$/, `${name}-${date}-${index + 1}$1`)
});
}
caution
有几点需要注意:
- 记得替换代码中的组件 id;
- 在示例代码中,因数据结构是对象列表
[{},{}]
所以直接修改对象的属性可以生效,如果不是这种数据结构,需要 setValue 方法来设置值;