RuoYi
2026-04-10 31d588a7c9d1b4749740307df2ec0bc0d930ada7
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java
@@ -8,8 +8,8 @@
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.ArrayUtils;
import com.ruoyi.common.core.utils.StringUtils;
@@ -18,7 +18,7 @@
 * 
 * @author ruoyi
 */
public class FileUtils extends org.apache.commons.io.FileUtils
public class FileUtils
{
    /** 字符常量:斜杠 {@code '/'} */
    public static final char SLASH = '/';
@@ -97,8 +97,7 @@
        // 路径为文件且不为空则进行删除
        if (file.isFile() && file.exists())
        {
            file.delete();
            flag = true;
            flag = file.delete();
        }
        return flag;
    }
@@ -115,27 +114,20 @@
    }
    /**
     * 检查文件是否可下载
     * 校验文件路径合法性(安全性与扩展名)
     * 
     * @param resource 需要下载的文件
     * @param fileUrl 待校验的文件地址
     * @return true 正常 false 非法
     */
    public static boolean checkAllowDownload(String resource)
    public static boolean validateFilePath(String fileUrl)
    {
        // 禁止目录上跳级别
        if (StringUtils.contains(resource, ".."))
        if (StringUtils.contains(fileUrl, ".."))
        {
            return false;
        }
        // 检查允许下载的文件规则
        if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource)))
        {
            return true;
        }
        // 不在允许下载的文件规则
        return false;
        // 判断是否在允许下载的文件规则内
        return ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(fileUrl));
    }
    /**
@@ -244,6 +236,7 @@
                .append(percentEncodedFileName);
        response.setHeader("Content-disposition", contentDispositionValue.toString());
        response.setHeader("download-filename", percentEncodedFileName);
    }
    /**