Untuk mengimbangi 5 sen saya:
TL, DR
Saya menggunakan MimetypesFileTypeMap dan menambahkan mime yang tidak ada di sana dan saya secara khusus membutuhkannya, ke dalam file mime.types.
Dan sekarang, yang lama dibaca:
Pertama-tama, daftar jenis MIME sangat besar , lihat di sini: https://www.iana.org/assignments/media-types/media-types.xhtml
Saya suka menggunakan fasilitas standar yang disediakan oleh JDK terlebih dahulu, dan jika itu tidak berhasil, saya akan pergi dan mencari yang lain.
Tentukan jenis file dari ekstensi file
Sejak 1.6, Java memiliki MimetypesFileTypeMap, seperti yang ditunjukkan dalam salah satu jawaban di atas, dan ini adalah cara paling sederhana untuk menentukan tipe mime:
new MimetypesFileTypeMap().getContentType( fileName );
Dalam implementasi vanilla ini tidak banyak membantu (yaitu berfungsi untuk .html tetapi tidak untuk .png). Namun, sangat sederhana untuk menambahkan jenis konten apa pun yang Anda butuhkan:
- Buat file bernama 'mime.types' di folder META-INF di proyek Anda
- Tambahkan baris untuk setiap jenis mime yang Anda butuhkan dan implementasi default tidak memberikan (ada ratusan jenis mime dan daftar bertambah seiring berjalannya waktu).
Contoh entri untuk file png dan js adalah:
image/png png PNG
application/javascript js
Untuk format file mime.types, lihat detail lebih lanjut di sini: https://docs.oracle.com/javase/7/docs/api/javax/activation/MimetypesFileTypeMap.html
Tentukan jenis file dari konten file
Sejak 1.7, Java memiliki java.nio.file.spi.FileTypeDetector , yang mendefinisikan API standar untuk menentukan tipe file dalam implementasi yang spesifik .
Untuk mengambil tipe mime untuk file, Anda cukup menggunakan File dan melakukan ini dalam kode Anda:
Files.probeContentType(Paths.get("either file name or full path goes here"));
Definisi API menyediakan fasilitas yang mendukung untuk menentukan jenis pantomim file dari nama file atau dari konten file (byte ajaib). Itu sebabnya probeContentType () metode melempar IOException, jika implementasi API ini menggunakan Path yang disediakan untuk benar-benar mencoba membuka file yang terkait dengannya.
Sekali lagi, implementasi vanilla ini (yang datang dengan JDK) meninggalkan banyak hal yang diinginkan.
Di beberapa dunia ideal di galaksi yang sangat jauh, semua pustaka yang mencoba memecahkan masalah tipe file-to-mime ini hanya akan mengimplementasikan java.nio.file.spi.FileTypeDetector , Anda akan memasukkan jar perpustakaan implementasi yang disukai file ke classpath Anda dan hanya itu.
Di dunia nyata, bagian tempat Anda membutuhkan TL, DR, Anda harus menemukan perpustakaan dengan sebagian besar bintang di sebelah namanya dan menggunakannya. Untuk kasus khusus ini, saya tidak perlu satu (belum;)).