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

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

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.


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


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.


2

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.