Comment puis-je connaître le type MIME (Content-Type) d'un fichier?

108

Existe-t-il un moyen de connaître le type MIME (ou est-il appelé "Content-Type"?) D'un fichier dans un script bash Linux?

La raison pour laquelle j'en ai besoin est que ImageShack semble en avoir besoin pour télécharger un fichier, car pour une raison quelconque, il détecte le fichier .png en tant que application/octet-streamfichier.

J'ai vérifié le fichier, et c'est vraiment une image PNG:

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

Cela me donne l'erreur:

$ 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>

Cela fonctionne, mais je dois spécifier un TYPE MIME.

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

Réponses:

229

Utilisez file. Exemples:

> 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
bhups
la source
Pas si vous utilisez le Git bash sous Windows.
tivo
1
Pour obtenir juste le type de mime que vous pourriez faire:file --mime-type FILE_NAME | awk '{print $2}'
Justin Jenkins
23
@JustinJenkins -b omet le nom de fichier, donc file -b --mime-type FILE_NAMErenvoie uniquement le type mime
jaygooby
oukmimetypefinder filename
bitek
Ne reconnaît pas application/xmloutext/xml
Tseng
24

l'un des autres outils (en plus du fichier) que vous pouvez utiliser est xdg-mime

par exemple xdg-mime query filetype <file>

si tu as miam,

yum install xdg-utils.noarch

Un exemple de comparaison de xdg-mime et d'un fichier sur un fichier Subrip (sous-titres)

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

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

dans le fichier ci-dessus, ne l'affiche que sous forme de texte brut.

ghostdog74
la source
requête xdg-mime filetype install.sql; xprop: impossible d'ouvrir l'affichage ''
un codeur
xdg-mime est un script bash qui dépend fortement des variables d'environnement. Certains d'entre eux, par exemple DE, ne sont pas définis si vous n'êtes pas connecté à une session. Vérifiez-le vous$ less $(which xdg-mime)
ManuelSchneid3r
10

version du fichier <5: fichier -i -b / chemin / vers / fichier
version du fichier> = 5: fichier --mime-type -b / chemin / vers / fichier

Andreï
la source
1
qu'entendez-vous par version de fichier?
user2867106
1
@ user2867106 Je pense qu'il parle de la version de la commande de fichier.
jgh fun-run
4

Essayez la filecommande avec -ioption.

-ioption Fait en sorte que la commande file génère des chaînes de type mime plutôt que les plus traditionnelles lisibles par l'homme. Ainsi, il peut dire text/plain; charset=us-asciiplutôt que ASCII text.

codaddict
la source
2

file --mime fonctionne, mais pas --mime-type. au moins pour mon RHEL 5.

fanchyna
la source