Wie kann ich den MIME-Typ (Content-Type) einer Datei ermitteln?


107

Gibt es eine Möglichkeit, den MIME-Typ (oder heißt er "Content-Type"?) Einer Datei in einem Linux-Bash-Skript herauszufinden?

Der Grund, warum ich es brauche, ist, dass ImageShack es anscheinend zum Hochladen einer Datei benötigt, da es aus irgendeinem Grund die PNG-Datei als application/octet-streamDatei erkennt .

Ich habe die Datei überprüft und es ist wirklich ein PNG-Bild:

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

Das gibt mir den Fehler:

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

Dies funktioniert, aber ich muss einen MIME-TYPE angeben.

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

Antworten:


228

Verwenden Sie file. Beispiele:

> 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

Nicht, wenn Sie die Git-Bash unter Windows verwenden.
tivo

1
Um nur den Pantomimentyp zu erhalten, können Sie Folgendes tun:file --mime-type FILE_NAME | awk '{print $2}'
Justin Jenkins

23
@ JustinJenkins -b lässt den Dateinamen weg, file -b --mime-type FILE_NAMEgibt also nur den
MIME-

oderkmimetypefinder filename
Bitek

Erkennt nicht application/xmlodertext/xml
Tseng

24

Eines der anderen Tools (neben der Datei), das Sie verwenden können, ist xdg-mime

z.B xdg-mime query filetype <file>

wenn du lecker bist,

yum install xdg-utils.noarch

Ein Beispielvergleich von xdg-mime und Datei in einer Subrip-Datei (Untertitel)

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

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

In der obigen Datei wird es nur als einfacher Text angezeigt.


xdg-mime query Dateityp install.sql; xprop: Anzeige '' kann nicht geöffnet werden
ein Codierer

xdg-mime ist ein Bash-Skript, das sich stark auf Umgebungsvariablen stützt. Einige von ihnen, z. B. DE, werden nicht festgelegt, wenn Sie nicht in einer Sitzung angemeldet sind. $ less $(which xdg-mime)
Überzeugen

10

Dateiversion <5: Datei -i -b / Pfad / zu / Datei
Dateiversion> = 5: Datei --mime-Typ -b / Pfad / zu / Datei


1
Was meinst du mit Dateiversion?
user2867106

1
@ user2867106 Ich denke, er meint die Version des Dateibefehls.
JGH Fun-Run

4

Versuchen Sie den fileBefehl mit -iOption.

-iOption Bewirkt, dass der Befehl file anstelle von herkömmlichen Zeichenfolgen vom Typ MIME Zeichenfolgen vom Typ MIME ausgibt. So kann es text/plain; charset=us-asciieher sagen als ASCII text.


2

Datei --mime funktioniert, aber nicht --mime-type. Zumindest für mein RHEL 5.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.