Como posso descobrir o tipo MIME de um arquivo (Content-Type)?


108

Existe uma maneira de descobrir o tipo MIME (ou é chamado de "Content-Type"?) De um arquivo em um script bash do Linux?

O motivo pelo qual preciso disso é porque o ImageShack parece precisar dele para fazer upload de um arquivo, pois por algum motivo ele detecta o arquivo .png como um application/octet-streamarquivo.

Verifiquei o arquivo e é realmente uma imagem PNG:

$ cat /1.png 
?PNG
(with a heap load of random characters)

Isso me dá o erro:

$ curl -F "fileupload=@/1.png" http://www.imageshack.us/upload_api.php
<links>
<error id="wrong_file_type">Wrong file type detected for file 1.png:application/octet-stream</error>
</links>

Isso funciona, mas preciso especificar um MIME-TYPE.

$ curl -F "fileupload=@/1.png;type=image/png" http://www.imageshack.us/upload_api.php

Respostas:


229

Use file. Exemplos:

> file --mime-type image.png
image.png: image/png

> file -b --mime-type image.png
image/png

> file -i FILE_NAME
image.png: image/png; charset=binary

Não se você usar o Git bash no Windows.
tivo

1
Para obter apenas o tipo de mímica, você pode fazer:file --mime-type FILE_NAME | awk '{print $2}'
Justin Jenkins

23
@JustinJenkins -b omite o nome do arquivo, então file -b --mime-type FILE_NAMEretorna apenas o tipo MIME
jaygooby

oukmimetypefinder filename
bitek

Não reconhece application/xmloutext/xml
Tseng

24

uma das outras ferramentas (além do arquivo) que você pode usar é xdg-mime

por exemplo xdg-mime query filetype <file>

se você tem yum,

yum install xdg-utils.noarch

Um exemplo de comparação de xdg-mime e arquivo em um arquivo Subrip (legendas)

$ xdg-mime query filetype subtitles.srt
application/x-subrip

$ file --mime-type subtitles.srt
subtitles.srt: text/plain

no arquivo acima, mostre-o apenas como texto simples.


xdg-mime query filetype install.sql; xprop: incapaz de abrir o display ''
um codificador de

xdg-mime é um script bash que depende muito de variáveis ​​de ambiente. Alguns deles, por exemplo, DE, não são definidos se você não estiver conectado a uma sessão. Verifique você mesmo$ less $(which xdg-mime)
ManuelSchneid3r

10

versão do arquivo <5: arquivo -i -b / caminho / para /
versão do arquivo do arquivo> = 5: arquivo --mime-type -b / caminho / para / arquivo


1
o que você quer dizer com versão do arquivo?
user2867106

1
@ user2867106 Acho que ele quer dizer a versão do comando file.
jgh fun-run

4

Experimente o filecomando com -iopção.

-iopção Faz com que o comando file produza strings do tipo MIME em vez das mais tradicionais legíveis por humanos. Assim, pode-se dizer em text/plain; charset=us-asciivez de ASCII text.


2

arquivo --mime funciona, mas não --mime-type. pelo menos para meu RHEL 5.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.