Какой метод определения типа изображения является более надежным: контент-тип или MIME-сниффинг? - PullRequest
1 голос
/ 03 декабря 2011

Я хочу определить формат файла изображения в приложении Windows.Изображения загружаются из Интернета (через HTTP) или загружаются из локальных файлов.

Какой метод более надежен для определения формата файла изображения для файлов, загружаемых из Интернета?

  • Расширение файла является наиболее очевидным способом, но оно часто некорректно или отсутствует
  • Тип содержимого заголовка HTTP является хорошим кандидатом (я могу проверить тип изображения, не загружая его с помощью команды HTTP HEAD), ноиногда он не установлен должным образом
  • MIME-сниффинг (с помощью команды Windows API FindMimeFromData или путем ручной проверки содержимого файлов на наличие известных сигнатур) является последним известным мне способом, но я никогда не использовал его, и яне уверен, что это надежно

Итак, что я должен использовать?

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

Просмотр самих данных более надежен, но вам нужно добавить проверки для каждого конкретного типа, который вы хотите обнаружить и обработать.Обратите внимание, что если вы используете тип контента, то что-то в дальнейшем должно определять эту информацию.
Неправильно настроенные серверы и предположения о данных часто получают неправильный тип контента для гаджета Windows, Java jar и т. Д., Все из которых основаны на zipформат, для которого вам потребуется другой способ различения типов (возврат к расширению и т. д.).

1 голос
/ 08 декабря 2011

Большинство форматов файлов изображений содержат идентификатор с определенным байтовым смещением. Например, изображение JPG будет иметь строку JFIF со смещением 6, файлы PNG имеют PNG со смещением 1, файлы GIF имеют GIF89 или GIF87 со смещением 0, файлы BMP имеют BM со смещением 0 и пр.

...