使用 jQuery 非侵入式验证进行文件类型和扩展名验证

File type and extension validation with jQuery unobtrusive validation

提问人:race155 提问时间:6/10/2016 最后编辑:race155 更新时间:6/10/2016 访问量:1205

问:

我目前正在尝试验证将上传到页面上的文件。我希望能够验证文件类型是 .doc、.docx、.txt、.pdf、.rtf 以及大小是否为 4 mb 或更小。我尝试使用正则表达式通过以下代码验证类型。

     [RegularExpression(@"(^.*\.(rtf|doc|docx|pdf)$", ErrorMessage =@"Please upload a (.pdf, .doc, .docx, .txt, or .rtf) file")]

然后,我尝试通过创建以下类来验证文件大小和类型

     public class ValidateFileAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        int MaxContentLength = 1024;
        string[] AllowedFileExtensions = new string[] { ".doc", ".docx", ".pdf", ".txt", ".rtf" };

        var file = value as HttpPostedFileBase;

        if (file == null)
            return false;

        else if (!AllowedFileExtensions.Contains(file.FileName.Substring(file.FileName.LastIndexOf('.'))))
        {
            ErrorMessage = "Upload File Type: " + string.Join(", ", AllowedFileExtensions);
            return false;
        }

        else if (file.ContentLength > MaxContentLength)
        {
            ErrorMessage = "The Size of the file is too large : " + (MaxContentLength / 1024).ToString() + "MB";
            return false;
        }

        else
            return true;
    }

}

(我知道 1024 不允许我上传一个非常大的文件,但出于测试原因,我把它留在那里,看看它是否有效)。

在我使用的视图中@Html.TextBoxFor(m => m.CV.File, new { type="file"}) @Html.ValidationMessageFor(m => m.CV.File)

我不确定如何让验证正常工作,它不允许我输入不同的文件类型,但是,它也无法识别正确的文件类型。

jquery asp.net-mvc 不显现验证 unobtrusive-javascript

评论

1赞 6/10/2016
首先,文件大小和文件类型是 2 个不同的东西,您需要 2 个不同的验证属性,它们将像 和 一样使用。有关属性的实现,请参阅此问题/答案,有关 的示例,请参阅本文[FileSize(1024)][FileType("rtf|doc|docx|pdf")]FileSizeAttributeFileTypeAttribute
0赞 6/10/2016
这两个示例都提供了服务器端和客户端验证。对于客户端验证,必须实现规则并将其添加到 .有关详细信息,请参阅此文章IClientValidatablejQuery.validator
0赞 race155 6/15/2016
我参考了 FileType 示例,但我遇到了几个问题。第一个是,在 it 中说它无效,因为如果它不进入 if 语句,它就不会返回。第二件事是,它不会进入它从上面获取 validtypes,但实际上并没有验证任何内容。protected override Validation Resultpublic FileTypeAttribute(string validTypes)
0赞 6/15/2016
至于第一个问题 - 请参阅对链接答案的编辑(最后需要)。至于你的第二个问题,我不明白你的评论。return ValidationResult.Success;
0赞 race155 6/16/2016
在深入研究了第二个问题之后,我发现当页面加载文件框时,它正在通过并进行验证,但是当我提交文件时,它只是允许所有大小和类型进入下一页。我不确定为什么会这样。

答: 暂无答案