自定义验证器不适用于文件上传大小asp.net

时间:2017-06-19 10:17:49

标签: c# asp.net

我想在用户尝试上传大小超过10 Mb的文件时显示错误消息。这是我的验证码:

<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="File size" ControlToValidate="attach" OnServerValidate="FileUploadCustomValidator_ServerValidate"></asp:CustomValidator>

以下是FileUploadCustomValidator_ServerValidate的代码:

protected void FileUploadCustomValidator_ServerValidate(object sender, ServerValidateEventArgs e)
    {
        if (attach.HasFile)
        {
            if (attach.PostedFile.ContentLength > 10240)
            {
                e.IsValid = true;
            }
            else
            {
                e.IsValid = false;
            }
        }
    }

附件:

if (attach.HasFile)
            {
                attach.PostedFile.SaveAs(Server.MapPath("~/Data/") + attach.FileName);
                filename = attach.PostedFile.FileName.ToString();
                com.Parameters.AddWithValue("@attach", filename);
            }
            else
            {
                com.Parameters.AddWithValue("@attach", "");
            }

现在问题:它没有显示错误消息而没有验证。哪里有问题。

4 个答案:

答案 0 :(得分:0)

看起来不错,但我觉得你忘记了attach.HasFile是假的条件,还需要改变条件, 我们知道1 Byte = 0.000001 MB并且您想要将文件长度验证10MB,请在处理程序中进行以下更改:

 if (attach.HasFile)
 {
    if ((int)(attach.PostedFile.ContentLength * 0.000001) < 10)
    {
        e.IsValid = true;
    }
    else
    {
        e.IsValid = false;
    }
 }
 else
 {
     e.IsValid = false;
 }

答案 1 :(得分:0)

我在你的代码中看到两个问题。如果文件大小更大 10MB ,您希望验证失败,但只有当文件大小 时,您的代码才会使验证失败10KB 即可。这是你应该做的:

if (attach.PostedFile.ContentLength > 10485760) // 10MB = 10 * (2^20)
{
    e.IsValid = false;
}
else
{
    e.IsValid = true;
}

答案 2 :(得分:0)

尝试代码

    private const int fileLengthPerMB = 1048576;
    private const int permitedFileSize = 10;
    int postedFileLength = fuHolterDiary.PostedFile.ContentLength;
    if ((postedFileLength / fileLengthPerMB) <= permitedFileSize)
    {
      e.IsValid = true;
    }
    else
    {
      e.IsValid = false;
      lblError.Text = "File size is too large. Maximum size permitted is 10 MB.";                           
    }

您可以通过更改const

来更改文件大小

答案 3 :(得分:0)

删除ControlToValidate =&#34;附加&#34;然后再试一次。您不必使用此属性,因为它在许多情况下都不起作用。

您应该做的是直接在validator事件中定位fileUpload控件。做这样的事情:

protected void FileUploadCustomValidator_ServerValidate(object sender, ServerValidateEventArgs args)
{
    if (fileUpload1.HasFile)
    {
        if (fileUpload1.PostedFile.ContentLength < 4024000) // if file is less than 3.8Mb
        {
            args.IsValid = true;
        }
        else
        {
            args.IsValid = false;
        }
    }

编辑:同时更改事件中的最后一个参数&#34; e&#34;到&#34; args&#34;并在代码块内执行相同的操作。