Jednym ze sposobów jest użycie „magiczna liczba” Konwencja czytać pierwszy bity pliku.
http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html
Przykłady:
"BM" is a Bitmap image
"GIF8" is a GIF image
"\xff\xd8\xff\xe0" is a JPEG image
przykład w Ruby:
def bitmap?(data)
return data[0,2]=="MB"
end
def gif?(data)
return data[0,4]=="GIF8"
end
def jpeg?(data)
return data[0,4]=="\xff\xd8\xff\xe0"
end
def file_is_image?(filename)
f = File.open(filename,'rb') # rb means to read using binary
data = f.read(9) # magic numbers are up to 9 bytes
f.close
return bitmap?(data) or gif?(data) or jpeg?(data)
end
Dlaczego to wykorzystać zamiast rozszerzenia nazwy pliku lub modułu filemagic?
Aby wykryć typ danych przed zapisaniem danych na dysku. Na przykład możemy odczytać przesyłanie strumienia danych przed zapisaniem jakichkolwiek danych na dysk. Jeśli magiczna liczba nie pasuje do typu zawartości formularza internetowego, możemy natychmiast zgłosić błąd.
Implementujemy nasz kod realnego świata nieco inaczej. Tworzymy hash: każdy klucz jest magicznym ciągiem znaków, każda wartość jest symbolem takim jak: bitmap,: gif,: jpeg, itp. Jeśli ktoś chciałby zobaczyć nasz kod w świecie rzeczywistym, skontaktuj się ze mną tutaj.
Dziękuję Sinan za świetny link! Nie wiedziałem, że to istnieje. Dziękuję Ci. – sjsc
Polecenie pliku jest naprawdę dobre, więc to opakowanie powinno wykonać zadanie. – tadman