Mam tablicę bajtów w bazie danych.Jak wyodrębnić rozszerzenie pliku z tablicy bajtów
Jak wyodrębnić rozszerzenie pliku (mime/type) z tablicy bajtów w java?
Mam tablicę bajtów w bazie danych.Jak wyodrębnić rozszerzenie pliku z tablicy bajtów
Jak wyodrębnić rozszerzenie pliku (mime/type) z tablicy bajtów w java?
Jeśli jest to dla przechowywania pliku, który jest przesłane:
Jeśli nie masz oryginalnego pliku, a masz tylko bajty, masz kilka dobrych rozwiązań.
Jeśli jesteś w stanie korzystać z biblioteki, spójrz na użyciu mime-util do wglądu bajtów:
http://technopaper.blogspot.com/2009/03/identifying-mime-using-mime-util.html
Jeśli trzeba zbudować własny detektor bajtowy, oto wiele z najbardziej popularne bajtów uruchamiania:
"BC" => bitcode,
"BM" => bitmap,
"BZ" => bzip,
"MZ" => exe,
"SIMPLE"=> fits,
"GIF8" => gif,
"GKSM" => gks,
[0x01,0xDA].pack('c*') => iris_rgb,
[0xF1,0x00,0x40,0xBB].pack('c*') => itc,
[0xFF,0xD8].pack('c*') => jpeg,
"IIN1" => niff,
"MThd" => midi,
"%PDF" => pdf,
"VIEW" => pm,
[0x89].pack('c*') + "PNG" => png,
"%!" => postscript,
"Y" + [0xA6].pack('c*') + "j" + [0x95].pack('c*') => sun_rasterfile,
"MM*" + [0x00].pack('c*') => tiff,
"II*" + [0x00].pack('c*') => tiff,
"gimp xcf" => gimp_xcf,
"#FIG" => xfig,
"/* XPM */" => xpm,
[0x23,0x21].pack('c*') => shebang,
[0x1F,0x9D].pack('c*') => compress,
[0x1F,0x8B].pack('c*') => gzip,
"PK" + [0x03,0x04].pack('c*') => pkzip,
"MZ" => dos_os2_windows_executable,
".ELF" => unix_elf,
[0x99,0x00].pack('c*') => pgp_public_ring,
[0x95,0x01].pack('c*') => pgp_security_ring,
[0x95,0x00].pack('c*') => pgp_security_ring,
[0xA6,0x00].pack('c*') => pgp_encrypted_data,
[0xD0,0xCF,0x11,0xE0].pack('c*') => docfile
Może potrzebuję zapisać dodatkową kolumnę w moim DB dla rozszerzenia pliku.
Jest to lepsze rozwiązanie niż próbując wyprowadzić MIME na podstawie zawartości bazy danych, do (przynajmniej) z następujących powodów:
(robię pewne założenia, że nie może być uzasadniona, ale pytanie nie daje żadnych wskazówek, w jaki sposób większy System przeznaczony jest do pracy.)
okazało się, że tam jest przyzwoity sposób w JDK
„s URLConnection
klasy, należy zapoznać się z następującą odpowiedź: Getting A File's Mime Type In Java
Jeśli trzeba wyodrębnić rozszerzenie pliku z tablicy bajtów zamiast z pliku, należy po prostu użyć java.io.ByteArrayInputStream
(klasa do czytania bajtów specjalnie z tablic bajtów) zamiast java.io.FileInputStream
(klasa do czytania bajtów z plików), jak w poniższym przykładzie:
byte[] content = ;
InputStream is = new ByteArrayInputStream(content);
String mimeType = URLConnection.guessContentTypeFromStream(is);
//...close stream
Nadzieja to pomaga ...
Pomocne tylko, jeśli można zapisać zawartość tablicy bajtów do pliku, a następnie przeczytać ją ponownie, co nie było częścią pierwotnego pytania. (Jestem w tej samej sytuacji.) – jmkgreen
Nie, nie, to rozwiązanie działa z dowolnym strumieniem bajtów - proszę odnieść się do mojej edytowanej odpowiedzi. W Javie 'InputStream' jest abstrakcją ponad' cokolwiek, od czego bajty mogą być odczytywane', więc kiedy gdzieś 'InputStream' jest potrzebny - to tylko kwestia znalezienia poprawnej implementacji' InputStream'. – Yura
Pracowałem jak wdzięk, dzięki! – MSwezey
'bajt array' jest tablicą bajtów i nic więcej.Jeśli masz 'tablicę bajtów' - nie możesz powiedzieć, co jest tam przechowywane. Możesz próbować odgadnąć zawartość tablicy bajtów, ale będzie to tylko zgadywanie. – bezmax
Nie sądzę, mogę to zrobić za pomocą klasy MagicMatch, ale do tego muszę zaimportować zewnętrzny słoik. Szukam czegoś innego. bajt [] data = ... MagicMatch match = Magic.getMagicMatch (dane); String mimeType = match.getMimeType(); – emilan
Co miałem na myśli - nie ma żadnego typu MIME zapisanego w tablicy bajtów w dowolnym miejscu (poza niektórymi typami danych, które ją obsługują). Na przykład, jeśli masz plik 'Hello World.txt' zapisany na tablicy bajtów, masz 11 bajtów:' H, e, l, l, o,, w, o, r, l, d'. Nie ma typu MIME, jak widać. Jaka jest biblioteka 'Magic' - próbuje ** zgadnąć ** typ pliku według zawartości pliku. Podobnie jak oprogramowanie antywirusowe szuka wzorców wirusów, tego rodzaju biblioteki próbują ** domyślać się typu MIME według pewnych określonych wzorców wspólnych dla tych typów MIME. – bezmax