Suponha que eu tenha um caminho completo do arquivo como: (/ sdcard / tlogo.png). Eu quero saber o seu tipo de mímica.
Eu criei uma função para isso
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;
}
mas quando eu chamo, ele retorna nulo.
File file = new File(filePath);
String fileType=CommonFunctions.getMimeType(file, context);
android
filesystems
mime-types
Sushant Bhatnagar
fonte
fonte
ID3
no início do seu texto para mexer com você ainda mais.*/*
?Detectar tipo MIME de qualquer arquivo
fonte
toLowerCase()
fez o truque.apostrophe
! Por exemplo. nome do arquivo =Don't go baby.mp3
. OPatternMatcher
interiorMimeTypeMap.getFileExtensionFromUrl()
não pode manipular o nome do arquivo e retorna String vazia; null passa a ser o tipo de tipo String!I. Shvedenenko
Worked, para os problemas que eu apontei acima. Mas essa resposta foi um indicador na direção correta.file://
oucontent://
.A solução MimeTypeMap acima retornou nula no meu uso. Isso funciona e é mais fácil:
fonte
Versão otimizada do respondere de Jens com segurança nula e tipo de fallback.
Atualização (19.03.2018)
Bônus: métodos acima como uma função de extensão Kotlin menos detalhada :
fonte
toLoverCase
parte nulas .fonte
Preste super perto atenção para umerk44 's solução acima.
getMimeTypeFromExtension
invocaguessMimeTypeTypeFromExtension
e é sensível a maiúsculas e minúsculas. Passei uma tarde nisso e, em seguida, olhei mais de perto -getMimeTypeFromExtension
retornaráNULL
se você passá-lo "JPG", enquanto retornará "imagem / jpeg" se passá-lo "jpg".fonte
Aqui está a solução que eu usei no meu aplicativo Android:
fonte
Às vezes, as respostas de Jeb e Jens não funcionam e retornam nulas. Neste caso, eu uso follow solution. O chefe do arquivo geralmente contém assinatura de tipo. Eu li e comparo com o conhecido na lista de assinaturas .
signatureId
é um índice de assinatura na matriz de assinaturas. Por exemplo,Agora eu tenho o tipo de arquivo, mesmo que o URI do arquivo não tenha. Em seguida, recebo o tipo mime por tipo de arquivo. Se você não souber qual tipo de mímica obter, poderá encontrar o apropriado nesta tabela .
Funciona para muitos tipos de arquivos. Mas para o vídeo não funciona, porque você precisa de um codec de vídeo conhecido para obter um tipo de mímica. Para obter o tipo MIME do vídeo, uso o MediaMetadataRetriever .
fonte
Tentei usar métodos padrão para determinar o tipo de mímica, mas não consigo reter a extensão do arquivo usando
MimeTypeMap.getFileExtensionFromUrl(uri.getPath())
. Este método me devolveu uma string vazia. Então, eu fiz uma solução não trivial para manter a extensão do arquivo.Aqui está o método retornando a extensão do arquivo:
E, mantendo a extensão do arquivo, é possível obter o tipo mime como abaixo:
fonte
MimeTypeMap.getFileExtensionFromUrl
retornou uma string vazia para os nomes de arquivos que possuem caracteres inválidos conforme a implementação interna de aPatternMatcher
. Isso funcionou para mim completamente! Adorei, sem problemas até agora!String extension = file.getName().split("\\.")[1]
também teria funcionado, eliminando o método getExtension ().MimeTypeMap
pode não reconhecer algumas extensões de arquivo como flv, mpeg, 3gpp, cpp. Então, você precisa pensar em como expandir o MimeTypeMap para manter seu código. Aqui está um exemplo.http://grepcode.com/file/repo1.maven.org/maven2/com.google.okhttp/okhttp/20120626/libcore/net/MimeUtils.java#MimeUtils
Além disso, aqui está uma lista completa dos tipos de mímica
http: //www.sitepoint.com/web-foundations/mime-types-complete-list/
fonte
Para Xamarin Android (da resposta da @ HoaLe acima)
fonte
fonte
fonte
fonte
Eu enfrentei um problema semelhante. Até agora eu sei que o resultado pode ser diferente para nomes diferentes, então finalmente cheguei a esta solução.
fonte
A solução acima retornou nulo no caso do arquivo .rar, usando URLConnection.guessContentTypeFromName (url) trabalhado nesse caso.
fonte
mime do arquivo local:
fonte
você tem várias opções para obter a extensão do arquivo: como: 1-
String filename = uri.getLastPathSegment();
veja este link2-você pode usar esse código também
mas isso não é bom dia. 3 - se você tiver um URI de arquivo, use este código
4-se você tiver URL, use este código:
aproveite seu código :)
fonte
fonte
fonte
Também retornou valor nulo no meu caminho de caso foi
como contornar o uso
então método parece
como resultado, ele retorna resultado de sucesso:
Espero que ajude alguém
fonte
Nenhuma das respostas aqui é perfeita. Aqui está uma resposta que combina os melhores elementos de todas as principais respostas:
fonte
fonte
Considero que a maneira mais fácil é consultar este arquivo de recursos: https://android.googlesource.com/platform/libcore/+/master/luni/src/main/java/libcore/net/android.mime.types
fonte
Não sei por que
MimeTypeMap.getFileExtensionFromUrl()
tem problemas comspace
s e com outros caracteres, isso retorna""
, mas acabei de escrever esse método para alterar o nome do arquivo para um nome admissível. Está apenas brincando comString
s. No entanto, isso meio que funciona. Através do método, osspace
s existentes no nome do arquivo são transformados em um caractere desejável (que, aqui, é "x") viareplaceAll(" ", "x")
e outros caracteres inadequados são transformados em um caractere adequadoURLEncoder
. portanto, o uso (de acordo com os códigos apresentados na pergunta e na resposta selecionada) deve ser algo parecidogetMimeType(reviseUrl(url))
.fonte