Introduction
Validate the Extionsions that you need and the size of the upload file with YaldaValidation!!!
This validation control named "YaldaValidation" is a custom validation control that gets the job easily for those working with file upload.
It is quiet simple and easy to use.
How to use
Just add the C# class to your App_Code folder. Look at this code snippet:
<%@ Register TagPrefix="custom" Namespace="testproject.App_Code" Assembly="App_Code" %>
You have to register this custom validator (if you just paste this below code it will ask you to generate automatically the register declare).
the YaldaValidation
<custom:YaldaValidator ControlToValidate="FileUpload1"
Display="Dynamic" Extensions="jpeg+png" runat="server"
SizeOfTheFileInKb="100" ErrorMessage="*">
</custom:YaldaValidator>
This validation has the same attributes of base validation, but there are two more attributes that make it useful for me!
First is Extensions
: you put your extensions here and leave a +
between the extension names!
Second is SizeOfTheFileInKb
: you set the file size in KB and if the uploaded file is bigger than that, the validator causes a validation error!
How It Works
I create a new validation control by deriving a new control from the BaseValidator
class. This is the base class for all validation controls.
basevalidator
is a MustInherit
(abstract) class, which requires to implement a single method: EvaluateIsValid
=> Returns true when the form field
being validated is valid.
You just need to override this method.
My YaldaValidator.cs class code
using System.Linq;
using System.Web.UI.WebControls;
namespace testproject.App_Code
{
public class YaldaValidator : BaseValidator
{
string _extensions = "";
public string Extensions
{
get { return _extensions; }
set { _extensions = value; }
}
int _sizeOfTheFileInKb = 1;
public int SizeOfTheFileInKb
{
get { return _sizeOfTheFileInKb; }
set { _sizeOfTheFileInKb = value; }
}
protected override bool EvaluateIsValid()
{
FileUpload fu = (FileUpload)FindControl(this.ControlToValidate);
string[] ex = _extensions.Split('+');
if (fu.HasFile && fu.PostedFile.ContentLength <= _sizeOfTheFileInKb *
1024 && ex.Contains(System.IO.Path.GetExtension(fu.PostedFile.FileName).Substring(1)))
{
return true;
}
else
{
return false;
}
}
}
}
Code Explanation
I get the extensions as a string
set it to _Extensions
. And I get the file size as int
in kb an set to _SizeOfTheFileInKb
. In
the EvaluateIsValid()
method I find the FileUpload
control (get ID by this.ControlToValidate
).
FileUpload fu = (FileUpload)FindControl(this.ControlToValidate);
Then make the string into a array of strings using the .Split()
method.
string[] ex = _extensions.Split('+');
In the if
clause, I check if the file exists using the .HasFile()
method, and then compare the size of
the existing file with the valid size (it's a multiple of 1024 because it's in KB).
At last check the file extension with one of the given extension names.
if (fu.HasFile && fu.PostedFile.ContentLength <= _sizeOfTheFileInKb * 1024 &&
ex.Contains(System.IO.Path.GetExtension(fu.PostedFile.FileName).Substring(1)))
If the conditions return
true
, you can upload your file.