A fájl MIME típusának megszerzése Java-ban

1. Áttekintés

Ebben az oktatóanyagban megvizsgáljuk a fájl MIME-típusainak megszerzésére vonatkozó különféle stratégiákat. Megvizsgáljuk a rendelkezésre álló MIME-típusok kiterjesztését a stratégiákra, ahol csak lehetséges.

Arra is felhívjuk a figyelmet, hogy hol kellene előnyben részesítenünk az egyik stratégiát a másikkal szemben.

2. A Java 7 használata

Kezdjük a Java 7-tel - amely biztosítja a módszert Files.probeContentType (elérési út) a MIME típus feloldásához:

@Test public void whenUsingJava7_thenSuccess () {Path path = new File ("product.png"). ToPath (); String mimeType = Files.probeContentType (elérési út); assertEquals (mimeType, "image / png"); } 

Ez a módszer a telepítetteket használja FileTypeDetector megvalósítások a MIME típusának vizsgálatára. Felhívja a probeContentType az egyes megvalósításokból a típus megoldásához.

Most, ha a fájlt bármelyik megvalósítás felismeri, a tartalom típusa visszaküldik. Ha azonban ez nem történik meg, akkor a rendszer alapértelmezett fájltípus-érzékelőt hívja meg.

Az alapértelmezett megvalósítások azonban operációs rendszer-specifikusak, és a használt operációs rendszertől függően meghiúsulhatnak.

Emellett azt is fontos megjegyezni, hogy a stratégia kudarcot vall, ha a fájl nincs a fájlrendszerben. Továbbá, ha a fájlnak nincs kiterjesztése, az meghibásodást eredményez.

3. Használata URLConnection

URLConnection számos API-t biztosít a fájl MIME-típusainak felderítésére. Fedezzük fel röviden mindegyiket.

3.1. Használata getContentType ()

Tudjuk használni getContentType () a metódusa URLConnection a fájl MIME típusának lekéréséhez:

@Test public void whenUsingGetContentType_thenSuccess () {File file = new File ("product.png"); URLConnection kapcsolat = file.toURL (). OpenConnection (); Karakterlánc mimeType = connection.getContentType (); assertEquals (mimeType, "image / png"); }

Ennek a megközelítésnek azonban az a fő hátránya, hogy nagyon lassú.

3.2. Használata guessContentTypeFromName ()

Ezután nézzük meg, hogyan használhatjuk a guessContentTypeFromName () erre a célra:

@Test public void whenUsingGuessContentTypeFromName_thenSuccess () {File file = new File ("product.png"); Karakterlánc mimeType = URLConnection.guessContentTypeFromName (file.getName ()); assertEquals (mimeType, "image / png"); }

Ez a módszer használja a belső FileNameMap nak nek oldja meg a MIME típust a kiterjesztésből.

Lehetőségünk van a használatra is guessContentTypeFromStream () ehelyett a bemeneti adatfolyam első néhány karakterét használja a típus meghatározásához.

3.3. Használata getFileNameMap()

Gyorsabb módja a MIME típus megszerzésének a használatával URLConnection használja a getFileNameMap () módszer:

@Test public void whenUsingGetFileNameMap_thenSuccess () {File file = new File ("product.png"); FileNameMap fileNameMap = URLConnection.getFileNameMap (); Karakterlánc mimeType = fileNameMap.getContentTypeFor (file.getName ()); assertEquals (mimeType, "image / png"); }

A metódus a MIME-típusok táblázatát adja vissza, amelyet a URLConnection. Ezt a táblázatot használjuk a bemeneti fájltípus feloldására.

A MIME-típusok beépített táblázata nagyon korlátozott URLConnection.

Alapértelmezés szerint, az osztály használja tartalomtípusok.tulajdonságok fájl JRE_HOME / lib. Kiterjeszthetjük azonban úgy, hogy megadunk egy felhasználóspecifikus táblázatot a content.types.user.table ingatlan:

System.setProperty ("content.types.user.table", ""); 

4. Használata MimeTypesFileTypeMap

MimeTypesFileTypeMap megoldja a MIME típusokat a fájl kiterjesztésével. Ez az osztály Java 6-tal érkezett, és ezért nagyon hasznos, amikor a JDK 1.6-mal dolgozunk.

Most nézzük meg, hogyan kell használni:

@Test public void whenUsingMimeTypesFileTypeMap_thenSuccess () {File file = new File ("product.png"); MimetypesFileTypeMap fileTypeMap = új MimetypesFileTypeMap (); Karakterlánc mimeType = fileTypeMap.getContentType (file.getName ()); assertEquals (mimeType, "image / png"); }

Itt átadhatjuk a fájl nevét vagy a File magát a függvény paramétereként. Azonban a funkció a File például, mivel a paraméter belsőleg meghívja a túlterhelt metódust, amely a fájlnevet fogadja el paraméterként.

Belsőleg ez a módszer megkeres egy fájlt mime.típusok a típusfelbontáshoz. Nagyon fontos megjegyezni, hogy a módszer meghatározott sorrendben keresi a fájlt:

  1. Programszerűen hozzáadott bejegyzések a MimetypesFileTypeMap példa
  2. .mime.típusok a felhasználó saját könyvtárában
  3. /lib/mime.types
  4. megnevezett erőforrások META-INF / mime.types
  5. nevű erőforrás META-INF / mimetypes.default (általában csak a aktiválás.jar fájl)

Ha azonban nem található fájl, akkor az visszatér alkalmazás / oktettfolyam válaszként.

5. Használata jMimeMagic

A jMimeMagic egy korlátozottan licencelt könyvtár, amelyet felhasználhatunk egy fájl MIME-típusának megszerzésére.

Kezdjük a Maven-függőség konfigurálásával:

 net.sf.jmimemagic jmimemagic 0.1.5 

A könyvtár legújabb verzióját a Maven Central oldalon találjuk.

Ezután megvizsgáljuk, hogyan kell működni a könyvtárral:

@Test public void whenUsingJmimeMagic_thenSuccess () {File file = new File ("product.png"); Varázsvarázs = új Varázslat (); MagicMatch match = magic.getMagicMatch (fájl, hamis); assertEquals (match.getMimeType (), "image / png"); }

Ez a könyvtár adatfolyammal képes működni, ezért nem igényli a fájl jelenlétét a fájlrendszerben.

6. Apache Tika használata

Az Apache Tika olyan eszközkészlet, amely metaadatokat és szöveget észlel és kivonatol különféle fájlokból. Gazdag és hatékony API-val rendelkezik, és a mag-maggal érkezik, amelyet felhasználhatunk a fájl MIME-típusának felderítésére.

Kezdjük a Maven-függőség konfigurálásával:

 org.apache.tika tika-core 1.18 

Ezután felhasználjuk a felismerni() módszer a típus feloldására:

@Test public void whenUsingTika_thenSuccess () {File file = new File ("product.png"); Tika tika = új Tika (); Karakterlánc mimeType = tika.detect (fájl); assertEquals (mimeType, "image / png"); }

A könyvtár az adatfolyam előtag varázsjelzőire támaszkodik a típus felbontása érdekében.

7. Következtetés

Ebben a cikkben megvizsgáltuk a fájl MIME-típusának megszerzésére vonatkozó különféle stratégiákat. Továbbá elemeztük a megközelítések kompromisszumait is. Kiemeltük azokat a forgatókönyveket is, ahol az egyik stratégiát előnyben kell részesítenünk a másikkal szemben.

A cikkben használt teljes forráskód, mint mindig, a GitHub webhelyén érhető el.


$config[zx-auto] not found$config[zx-overlay] not found