Сначала используйте атрибут accept в HTML.
Затем проверьте ContentType файла.
( НЕ проверяйте имя файла, это веб, а не локальная машина, поэтому вы не знаете, как люди называют файлы, особенно в системах, отличающихся от окон в том, как они определяют файл типы, или которые имеют различные привязки между расширениями и приложениями к вашему )
Наконец, если возможно обнаружить ошибочно сообщенный файл (попытка загрузить его в соответствующий класс - например, загрузить изображение / png в растровое изображение - поиск определенных «магических чисел» файла в первых нескольких байтах, и т.д.), тогда сделайте это тоже. Подход с использованием магических чисел может быть полезен (не путайте с рекомендацией использовать константы, чтобы избежать «магических чисел» в исходном коде, имеющих различное значение), поскольку многие типы файлов должны начинаться с последовательности байтов, которая соответствует определенному шаблону. Например. если кто-то загружает случайный мусор, заявляя, что это PNG или GIF, вы можете обнаружить это, посмотрев только первые несколько байтов.