Определить, является ли данный файл образом и допустимым образом определенного типа в java
У меня есть требование получить от пользователя входной файл, который должен быть изображением только указанного типа. Например, только JPEG
s. другие файлы должны быть отклонены.
Поэтому я реализовал наивную базовую проверку для файла
fileName.toLowerCase().endsWith(".jpg") || fileName.toLowerCase().endsWith(".jpeg")
Итак, если пользователь загрузил файл.png, этот файл был отклонен. Но потом пользователи поняли, что если они просто переименуют файл.png в файл.jpg, файл будет загружен.
Есть ли способ определить, является ли предоставленный файл допустимым изображением данного типа, используя только JAVA SDK
без внешнего банки? (обратите внимание, что я все еще работаю с JDK6). Спасибо.
2 ответа:
Это должно быть относительно легко сделать некоторые наивные проверка отдельных фотку из ПНГ. Согласно Википедии , файлы JPEG всегда начинаются с
FF D8
. Однако PNGs, по-видимому, начинаются с89 50
, поэтому можно легко отличить их от простого чтения байта или двух из файла.Я бы рекомендовал поискать форматы файлов наиболее важных типов изображений, чтобы убедиться, что нет какого-то другого основного, начинающегося с
FF D8
. Это кажется маловероятным однако.Edit: JPEG, PNG, GIF, BMP и TIFF все, кажется, имеют магические значения в начале файлов, чтобы отличить их от других типов.
Декодировать файл в формате jpeg и посмотреть, вызывает ли он исключение или возвращает изображение?
Для этого можно использовать JDK ImageIO (http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html начните с получения ImageReader для jpeg, затем пусть этот читатель попытается прочитать изображение.