Jak mogę znaleźć typ MIME pliku (Content-Type)?

108

Czy istnieje sposób, aby znaleźć typ MIME (czy też nazywa się to „Content-Type”?) Pliku w skrypcie bash systemu Linux?

Powodem, dla którego go potrzebuję, jest to, że ImageShack wydaje się potrzebować go do przesłania pliku, ponieważ z jakiegoś powodu wykrywa plik .png jako application/octet-streamplik.

Sprawdziłem plik i naprawdę jest to obraz PNG:

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

To daje mi błąd:

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

To działa, ale muszę określić TYP MIME.

$ curl -F "fileupload=@/1.png;type=image/png" http://www.imageshack.us/upload_api.php
Mennica
źródło

Odpowiedzi:

229

Użyj file. Przykłady:

> 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
źródło
Nie, jeśli używasz Git bash pod oknami.
tivo
1
Aby uzyskać tylko typ mime, możesz zrobić:file --mime-type FILE_NAME | awk '{print $2}'
Justin Jenkins,
23
@JustinJenkins -b pomija nazwę pliku, więc file -b --mime-type FILE_NAMEzwraca tylko typ MIME
jaygooby
lubkmimetypefinder filename
bitek
Nie rozpoznaje application/xmllubtext/xml
Tseng
24

jednym z innych narzędzi (oprócz pliku), którego możesz użyć, jest xdg-mime

na przykład xdg-mime query filetype <file>

jeśli masz mniam,

yum install xdg-utils.noarch

Przykładowe porównanie xdg-mime i pliku w pliku Subrip (napisy)

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

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

w powyższym pliku pokaż go tylko jako zwykły tekst.

ghostdog74
źródło
zapytanie xdg-mime typ pliku install.sql; xprop: nie można otworzyć wyświetlacza ''
koder
xdg-mime to skrypt bash, który w dużym stopniu opiera się na zmiennych środowiskowych. Niektóre z nich, np. DE, nie są ustawione, jeśli nie jesteś zalogowany do sesji. Sprawdź to sam$ less $(which xdg-mime)
ManuelSchneid3r
10

wersja pliku <5: plik -i -b / ścieżka / do /
wersja pliku> = 5: plik - typ-mime -b / ścieżka / do / pliku

Andrey
źródło
1
co masz na myśli przez wersję pliku?
user2867106
1
@ user2867106 Myślę, że ma na myśli wersję polecenia pliku.
jgh fun-run
4

Wypróbuj filepolecenie z -iopcją.

-iopcja Powoduje, że polecenie file wyświetla ciągi typu MIME zamiast bardziej tradycyjnych, czytelnych dla człowieka. Dlatego może text/plain; charset=us-asciiraczej powiedzieć niż ASCII text.

codaddict
źródło
2

plik --mime działa, ale nie - typ-mime. przynajmniej dla mojego RHEL 5.

fanchyna
źródło