25

I'm using javascript's FileReader and my customized function for reading an JPG-JPEG image, My problem is that how it's possible to detect the file extension through my code below and give error to user if the file is not JPG-JPEG:

function readURL(input) {
  if (input.files && input.files[0]) {
    var reader = new FileReader();

    reader.onload = function (e) {
      alert('image has read completely!');
    }

    reader.readAsDataURL(input.files[0]);
  }
}
4
  • 1
    No need to actually read the file, just get its .name? Commented Aug 2, 2014 at 16:05
  • But I wana read the file first Commented Aug 3, 2014 at 19:55
  • Nothing hinders you to also read it, but it's not necessary for getting the name Commented Aug 3, 2014 at 20:43
  • Note that this is probably an XY problem: you really want to be checking the MIME type: stackoverflow.com/a/29672957/2691058 Commented Jun 17, 2020 at 8:53

2 Answers 2

48

You can try this, I changed your code as follows:

var fileTypes = ['jpg', 'jpeg', 'png', 'what', 'ever', 'you', 'want'];  //acceptable file types

function readURL(input) {
    if (input.files && input.files[0]) {
        var extension = input.files[0].name.split('.').pop().toLowerCase(),  //file extension from input file
            isSuccess = fileTypes.indexOf(extension) > -1;  //is extension in acceptable types

        if (isSuccess) { //yes
            var reader = new FileReader();
            reader.onload = function (e) {
                alert('image has read completely!');
            }

            reader.readAsDataURL(input.files[0]);
        }
        else { //no
            //warning
        }
    }
}
Sign up to request clarification or add additional context in comments.

Comments

5

There's not a direct interface to read the file extension. You have at least 2 options:

  • Use a regex to extract the extension from the filename
  • Use the content type of the file as your filter

For the extension method it'd be something like:

var extension = fileName.match(/\.[0-9a-z]+$/i);

1 Comment

I like regex a lot better than splitting strings, and dropping chars, etc.. Thanks for the suggestion!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.