Image file upload validation using c#

Devildib
Devildib used Ask the Experts™
on
Hi experts,

I have below code working to validate any image uploaded other than gif format.
But there is one issue.When i change the name of any file say a textfile to .gif,
and then try to upload the same, it passes the extension validation and gives an error in below line:
 System.Drawing.Image img = System.Drawing.Image.FromStream(photocontrol.FileContent);

it says "invalid parameter".
How do i alert the user that the file is incorrect although the naming convention is ok?


ASPX code
===========
 <asp:Image runat="server" ID="ImagePreview" />                      
                               <asp:FileUpload ID="Photocontrol"  runat="server" />
                               <asp:Button ID="btnPhotoPreview" runat="server"  Text="Upload" OnClick="btnPreview_Click"/>


 

c# code
===========

protected void btnPreview_Click(object sender, EventArgs e)
        {
                     
            string[] allowed = {".gif" };
            string extension = Path.GetExtension(photocontrol.FileName);
            if (Array.IndexOf(allowed, extension) == -1)
            {
                MessageBoxShow(this, "Please upload GIF image only");
                PhotoUpload.Focus();
                return;
            }
            System.Drawing.Image img = System.Drawing.Image.FromStream(photocontrol.FileContent);
            float H = (img.Height / img.VerticalResolution);
            float W = (img.Width / img.HorizontalResolution);
            float resolution = img.HorizontalResolution;

            if (H > 1 || W > 7 || resolution < 96)
            {
                MessageBoxShow(this, "Please upload logo with maximum dimensions 7 inch X 1 inch and resolution not less than 100 dpi");
                PhotoUpload.Focus();
                return;
            }

            byte[] bytearray = null;
            string name = "";
            if (PhotoUpload.HasFile)
            {
                name = PhotoUpload.FileName;
                Stream stream = photocontrol.FileContent;
                stream.Seek(0, SeekOrigin.Begin);
                bytearray = new byte[stream.Length];
                int count = 0;
                while (count < stream.Length)
                {
                    bytearray[count++] = Convert.ToByte(stream.ReadByte());
                }
                Session["filedata"] = photocontrol.FileBytes;
                ImagePreview.ImageUrl = "ImageHandler.ashx?imgpath=" + name;
            }
            else
            {

            }
           
        }
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Use a try catch block to catch the exception "invalid parameter" and in the catch block write the code to inform user that the file is incorrect.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial