Avatar of Devildib
Devildib

asked on 

Image file upload validation using c#

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
            {

            }
           
        }
ASP.NETC#.NET Programming

Avatar of undefined
Last Comment
Abhigyan Srivastava

8/22/2022 - Mon