You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止ASP.NET FileUpload控件接收含非法字符的文件名?

解决ASP.NET WebForms FileUpload控件的文件名验证问题

我之前维护遗留WebForms项目时也碰到过这个坑——用RegularExpressionValidator验证FileUpload文件名没生效,大概率是正则写法不对或者Validator配置有遗漏,给你梳理下正确的解决办法:

一、正确配置客户端验证(RegularExpressionValidator)

首先得把Validator的配置做对,尤其是正则表达式和关联控件这两点:

1. 前端ASPX代码示例

<asp:FileUpload ID="imgFileUpload" runat="server" />
<asp:RegularExpressionValidator 
    ID="regValFileName" 
    runat="server"
    ControlToValidate="imgFileUpload" <!-- 必须指向FileUpload的ID,别写错! -->
    ValidationExpression="^[A-Za-z0-9_]+(\.[A-Za-z0-9_]+)*$"
    ErrorMessage="文件名只能包含字母、数字和下划线,禁止空格及其他特殊字符"
    Display="Dynamic"
    ForeColor="Red">
</asp:RegularExpressionValidator>
<asp:Button ID="btnUploadImage" runat="server" Text="上传图片" OnClick="btnUploadImage_Click" />

2. 正则表达式说明

这个正则的意思是:

  • ^ 和 $ 强制匹配整个文件名,避免出现“文件名部分符合就通过”的错误(比如之前你可能没加这两个符号,导致带空格的文件名也能通过)
  • [A-Za-z0-9_]+ 匹配字母、数字、下划线,至少出现一次
  • (\.[A-Za-z0-9_]+)* 允许带扩展名(包括多扩展名,比如file_v1.2.tar.gz),扩展名也只能是字母数字下划线

如果你的需求是主文件名仅限制,扩展名允许正常格式(比如.jpg、.png),可以把正则改成:^[A-Za-z0-9_]+\.[A-Za-z0-9]+$

二、必须补充服务器端验证

客户端验证很容易被绕过(比如禁用JS),所以一定要在上传按钮的点击事件里再做一次校验:

protected void btnUploadImage_Click(object sender, EventArgs e)
{
    // 先检查是否有文件上传
    if (!imgFileUpload.HasFile)
    {
        // 提示请选择文件,这里可以自己加逻辑
        return;
    }

    // 获取上传的文件名(不含路径)
    string fileName = System.IO.Path.GetFileName(imgFileUpload.FileName);
    // 定义验证正则
    var fileNameRegex = new System.Text.RegularExpressions.Regex(@"^[A-Za-z0-9_]+(\.[A-Za-z0-9_]+)*$");

    if (!fileNameRegex.IsMatch(fileName))
    {
        // 验证失败,手动标记Validator为无效,显示错误信息
        regValFileName.IsValid = false;
        return;
    }

    // 验证通过,执行上传逻辑
    // string savePath = Server.MapPath("~/Uploads/" + fileName);
    // imgFileUpload.SaveAs(savePath);
    // 这里可以加上传成功的提示
}

三、为什么之前的验证没生效?

大概率是这两个原因:

  1. 正则没加^和$:如果只写[A-Za-z0-9_],会匹配文件名中任意符合的片段,比如my file.jpg里的my符合规则,Validator就会判定通过,完全起不到限制作用
  2. ControlToValidate配置错误:如果Validator的这个属性没指向FileUpload的ID,或者ID写错了,验证根本不会触发

按照上面的步骤来,应该就能解决你的问题了。

内容的提问来源于stack exchange,提问作者DesertFoxAZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:27:50