JeeLowCode技术支持-小海

2026-09-20 16:40

暂时未定,后续会通过社区公告/微信群等方式公告

2026-09-20 15:03

SimpleEvaluationContext弃用StandardEvaluationContext 这个可以直接替换

白名单: 可以这样添加

首先添加 :

package com.jeelowcode.tool.framework.common.util.io;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.util.StrUtil;

import java.util.Collection;
import java.util.List;
import java.util.Locale;

import static com.jeelowcode.tool.framework.common.exception.enums.GlobalErrorCodeConstants.FILE_TYPE_NOT_ALLOWED;
import static com.jeelowcode.tool.framework.common.exception.util.ServiceExceptionUtil.exception;

/**
 * 上传文件安全校验工具类
 * <p>
 * 采用「后缀白名单」机制,由 jeelowcode.security.file-whitelist.enable 开关控制:

 *
 * @author mashu
 */
public class FileUploadSecurityUtils {

    private FileUploadSecurityUtils() {
    }

    /**
     * 校验文件后缀是否允许上传
     *
     * @param fileName        文件名或文件路径(可包含查询串,如 a.jpg?x=1)
     * @param enable          是否开启后缀白名单校验(开关)
     * @param allowExtensions 允许上传的后缀白名单,例如 jpg、png、pdf
     */
    public static void checkFileExtension(String fileName, boolean enable, List<String> allowExtensions) {
        // 未开启白名单校验,则直接放行
        if (!enable) {
            return;
        }
        // 文件名为空时无法校验,此处放行,交由后续逻辑兜底(例如用 path 填充 name)
        if (StrUtil.isBlank(fileName)) {
            return;
        }
        // 去掉查询串与锚点,仅保留文件主体
        String extName = FileNameUtil.extName(removeQueryString(fileName));
        // 无后缀文件无法确认安全性,直接拒绝
        if (StrUtil.isBlank(extName)) {
            throw exception(FILE_TYPE_NOT_ALLOWED);
        }
        if (!containsExtension(allowExtensions, extName)) {
            throw exception(FILE_TYPE_NOT_ALLOWED);
        }
    }

    /**
     * 去掉查询串(?)与锚点(#),仅保留文件主体
     */
    private static String removeQueryString(String fileName) {
        int cut = fileName.indexOf('?');
        int anchor = fileName.indexOf('#');
        if (anchor >= 0 && (cut < 0 || anchor < cut)) {
            cut = anchor;
        }
        return cut > 0 ? fileName.substring(0, cut) : fileName;
    }

    /**
     * 判断后缀是否在白名单内(忽略大小写,兼容配置为 .jpg 的写法)
     */
    private static boolean containsExtension(Collection<String> allowExtensions, String extName) {
        // 白名单为空时,视为全部拒绝
        if (CollUtil.isEmpty(allowExtensions)) {
            return false;
        }
        String ext = extName.toLowerCase(Locale.ROOT);
        return allowExtensions.stream()
                .filter(StrUtil::isNotBlank)
                .anyMatch(item -> StrUtil.equalsIgnoreCase(StrUtil.removePrefix(item.trim(), "."), ext));
    }

}


在上传文件的方法 添加 :


之后,添加 按钮和配置 :

在配置文件中,配置可上传的白名单


2026-08-28 14:38

这个签名是储存在oss 的,演示环境中功能未配置完整。如果要使用,请在自己的项目中的文件配置输入自己的配置;

2026-08-27 17:26

对应的api-key 有填写正确吗? 后台默认调用的是kimi



2026-08-27 10:18

可以去更新记录里面找对应的代码下载用git对比看一下。主要是这个时间段

2026-08-26 17:31

这个文件比较多,后端主要这个枚举 和对应的策略


可以让ai,帮你对比加上


2026-08-26 16:59

这个勾选上,就会把参数发送个接口,进行查询了

2026-08-26 15:36

1、



2、你这个是编辑吧, 默认选不了自己的。   可以参考这个演示表单:  https://demo.jeelowcode.com/low/table/test/2080623989883621377

2026-08-26 11:53

左树就是 你回显字段的表单数据 :



2026-08-12 11:47

参考这个表单的配置 :  https://demo.jeelowcode.com/low/table/test/2079864942934839297

先按月进行筛选,然后进行导出数据


2026-08-11 17:25

什么意思? 是指获取所有表名的接口吗 ? 是的话 :

2026-08-11 16:28

打开 :Network  看一下接口的返回信息 , 或者调试一下这个接口 :