Привет. У меня появилась задача определить формат файла. На первый взгляд, все довольно тривиально: взял расширение, вот тебе и формат файла. Я согласен, что в большинстве случаев это сработает. Но расширение файла не всегда указано (так было у меня), и его очень легко подделать. Получается задача: определить формат файла по его содержимому.
Блуждая по просторам интернета, я наткнулся на статью, где говорилось о “magic number”. Магическое число – это постоянное числовое или текстовое значение, используемое для идентификации формата файла. Действительно, если открыть в hex-редакторе несколько png файлов, то можно заметить, что первые несколько байт у них совпадают.
Также можно открыть pdf файлы и убедится, что первые несколько байт у них совпадают.
Список таких «магических чисел» есть в википедии.
Я реализовал на js небольшую библиотеку, которая может определить формат файла на стороне клиента (пока поддерживаются только jpg, png, gif, pdf).