I wanted to share a quick & easy way to validate uploaded images in ASP.NET. One of my projects has a feature allowing users to upload a logo. But I wanted to restrict them to JPG & GIF images, and ensure that the image was within a certain height. So....asp:CustomValidator to the rescue!
Here's the code for the web page with the INPUT file tag and the CustomValidator:
<INPUT type="file" id="txtCorporateLogo" name="txtCorporateLogo" runat="server">
<asp:CustomValidator ID="valLogo" Runat=server CssClass="validator" ErrorMessage="Logos can only be GIF or JPG images under 100 pixels high"OnServerValidate="ValidateLogo" ClientValidationFunction="checkLogo" ControlToValidate="txtCorporateLogo"><br>Logos can only be GIF or JPG images under 100 pixels high</asp:CustomValidator>
Here's the client-side javascript function that the CustomValidator calls to ensure that we don't post to the server if the image isn't a JPG or GIF. The function sets IsValid to true if there's no file specified, or if it ends with jpg, jpeg, or gif:
<script language="javascript"> function checkLogo(sender, args) { var filename = document.getElementById('txtCorporateLogo').value.toLowerCase(); if (filename.length < 1) { args.IsValid = true; } else if (filename.indexOf('.jpg') == -1 && filename.indexOf('.jpeg') == -1 && filename.indexOf('.gif') == -1) { args.IsValid = false; } else { args.IsValid = true; } } </script>
And here's the server-side method that confirms the image is 100 pixels high or shorter:
protected void ValidateLogo(object sender, ServerValidateEventArgs args) { HttpPostedFile imageFile = this.txtCorporateLogo.PostedFile; if (imageFile.FileName == String.Empty) { args.IsValid = true; } else if (!imageFile.FileName.ToLower().EndsWith("jpg") && !imageFile.FileName.ToLower().EndsWith("gif")) { args.IsValid = false; } else { System.Drawing.Bitmap bitmap = new Bitmap(imageFile.InputStream); if (bitmap.Height > 100) args.IsValid = false; else args.IsValid = true; bitmap.Dispose(); imageFile.InputStream.Position = 0; // reset the position in the stream } }
That's it. Just remember to check Page.IsValid in your submit method before doing anything with the image.
And I'm starting to get annoyed with FTB's code import. Look at that mess above! :)
Powered by: newtelligence dasBlog 2.0.7226.0
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2008, Ben Strackany
E-mail