Misalkan saya memiliki path lengkap file seperti: (/ sdcard / tlogo.png). Saya ingin tahu tipe pantomimnya.
Saya membuat fungsi untuk itu
public static String getMimeType(File file, Context context)
{
Uri uri = Uri.fromFile(file);
ContentResolver cR = context.getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
String type = mime.getExtensionFromMimeType(cR.getType(uri));
return type;
}
tetapi ketika saya menyebutnya, itu mengembalikan nol.
File file = new File(filePath);
String fileType=CommonFunctions.getMimeType(file, context);
android
filesystems
mime-types
Sushant Bhatnagar
sumber
sumber
ID3
di mulai dari teksnya untuk lebih mengacaukan Anda.*/*
?Mendeteksi tipe pantomim dari file apa pun
sumber
toLowerCase()
melakukan trik.apostrophe
! Misalnya. nama file =Don't go baby.mp3
. BagianPatternMatcher
dalamMimeTypeMap.getFileExtensionFromUrl()
tidak dapat menangani nama file dan mengembalikan String kosong; null menjadi String mimetype!I. Shvedenenko
Bekerja untuk masalah yang telah saya sebutkan di atas. Tetapi jawaban ini adalah penunjuk ke arah yang benar.file://
ataucontent://
.Solusi MimeTypeMap di atas mengembalikan nol dalam penggunaan saya. Ini berfungsi, dan lebih mudah:
sumber
Versi Jens yang dioptimalkan menjawab dengan keamanan nol dan tipe mundur.
Pembaruan (19.03.2018)
Bonus: Metode di atas sebagai fungsi ekstensi Kotlin yang kurang verbose :
sumber
toLoverCase
bagian.sumber
Perhatikan solusi umerk44 di atas. memanggil dan SENSITIF KASUS. Saya menghabiskan sore ini untuk melihat lebih dekat - akan kembali jika Anda melewatinya "JPG" sedangkan itu akan mengembalikan "image / jpeg" jika Anda meneruskannya "jpg".
getMimeTypeFromExtension
guessMimeTypeTypeFromExtension
getMimeTypeFromExtension
NULL
sumber
Inilah solusi yang saya gunakan di aplikasi Android saya:
sumber
Terkadang jawaban Jeb dan Jens tidak bekerja dan menghasilkan nol. Dalam hal ini saya menggunakan solusi ikuti. Kepala file biasanya berisi tipe tanda tangan. Saya membacanya dan membandingkannya dengan yang dikenal dalam daftar tanda tangan .
signatureId
adalah indeks tanda tangan dalam berbagai tanda tangan. Sebagai contoh,Sekarang saya memiliki tipe file bahkan jika file URI belum. Selanjutnya saya mendapatkan tipe mime berdasarkan tipe file. Jika Anda tidak tahu tipe mime mana yang harus Anda dapatkan, Anda dapat menemukan yang tepat di tabel ini .
Ini berfungsi untuk banyak jenis file. Tetapi untuk video itu tidak berfungsi, karena Anda perlu tahu codec video untuk mendapatkan tipe mime. Untuk mendapatkan video mime ketik saya menggunakan MediaMetadataRetriever .
sumber
Saya mencoba menggunakan metode standar untuk menentukan tipe mime, tetapi saya tidak dapat mempertahankan ekstensi file menggunakan
MimeTypeMap.getFileExtensionFromUrl(uri.getPath())
. Metode ini mengembalikan saya string kosong. Jadi saya membuat solusi non-sepele untuk mempertahankan ekstensi file.Berikut adalah metode mengembalikan ekstensi file:
Dan setelah mempertahankan ekstensi file, dimungkinkan untuk mendapatkan tipe mime seperti di bawah ini:
sumber
MimeTypeMap.getFileExtensionFromUrl
mengembalikan string kosong untuk Nama File yang memiliki karakter tidak valid sesuai implementasi internal aPatternMatcher
. Ini bekerja untuk saya sepenuhnya! Menyukainya, tidak ada masalah sejauh ini!String extension = file.getName().split("\\.")[1]
juga akan bekerja, dengan demikian, menghilangkan metode getExtension ().MimeTypeMap
mungkin tidak mengenali beberapa ekstensi file seperti flv, mpeg, 3gpp, cpp. Jadi, Anda perlu memikirkan cara memperluas MimeTypeMap untuk mempertahankan kode Anda. Inilah contohnya.http://grepcode.com/file/repo1.maven.org/maven2/com.google.okhttp/okhttp/20120626/libcore/net/MimeUtils.java#MimeUtils
Plus, berikut adalah daftar lengkap tipe mime
http: //www.sitepoint.com/web-foundations/mime-types-complete-list/
sumber
Untuk Xamarin Android (Dari @ HoaLe jawaban di atas)
sumber
sumber
sumber
sumber
Saya menghadapi masalah yang sama. Sejauh ini saya tahu hasilnya mungkin berbeda untuk nama yang berbeda, jadi akhirnya datang ke solusi ini.
sumber
Solusi di atas menghasilkan null dalam kasus file .rar, menggunakan URLConnection.guessContentTypeFromName (url) yang berfungsi dalam kasus ini.
sumber
pantomim dari file lokal:
sumber
Anda memiliki banyak pilihan untuk mendapatkan ekstensi file: seperti: 1-
String filename = uri.getLastPathSegment();
lihat tautan ini2-Anda dapat menggunakan kode ini juga
tapi ini tidak bagus aproch. 3-jika Anda memiliki file URI maka gunakan Kode ini
4-jika Anda memiliki URL maka gunakan kode ini:
nikmati kode kamu :)
sumber
sumber
sumber
Juga mengembalikan nilai nol di jalur kasus saya
sebagai bekerja di sekitar digunakan
jadi sepertinya metode
sebagai hasilnya mengembalikan hasil sukses:
Semoga ini bisa membantu siapa saja
sumber
Tidak ada jawaban di sini yang sempurna. Berikut adalah jawaban yang menggabungkan elemen terbaik dari semua jawaban teratas:
sumber
sumber
Saya menganggap cara termudah adalah merujuk ke file Sumber Daya ini: https://android.googlesource.com/platform/libcore/+/master/luni/src/main/java/libcore/net/android.mime.types
sumber
Saya tidak menyadari mengapa
MimeTypeMap.getFileExtensionFromUrl()
ada masalah dengan karakterspace
s dan beberapa karakter lain, yang muncul""
, tetapi saya hanya menulis metode ini untuk mengubah nama file menjadi yang dapat diterima. Itu hanya bermain denganString
s. Namun, ini semacam bekerja. Melalui metode ini, yangspace
ada dalam nama file diubah menjadi karakter yang diinginkan (yang, di sini, adalah "x") melaluireplaceAll(" ", "x")
dan karakter tidak cocok lainnya diubah menjadi yang sesuai melaluiURLEncoder
. jadi penggunaan (sesuai dengan kode yang disajikan dalam pertanyaan dan jawaban yang dipilih) harus sepertigetMimeType(reviseUrl(url))
.sumber