Як я можу дізнатись тип файлу MIME (тип вмісту)?


107

Чи є спосіб дізнатися тип MIME (або його називають "Content-Type"?) Файлу в скрипті bash Linux?

Причина мені потрібна в тому, що, здається, ImageShack потребує його для завантаження файлу, оскільки він чомусь виявляє .png application/octet-streamфайл.

Я перевірив файл, і це дійсно зображення PNG:

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

Це дає мені помилку:

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

Це працює, але мені потрібно вказати MIME-TYPE.

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

Відповіді:


228

Використовуйте file. Приклади:

> 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

Якщо ви не використовуєте Git bash під вікнами.
tivo

1
Щоб отримати лише тип міми, ви можете зробити:file --mime-type FILE_NAME | awk '{print $2}'
Джастін Дженкінс

23
@JustinJenkins -b пропускає ім'я файлу, тому file -b --mime-type FILE_NAMEповертає просто тип mime
jaygooby

абоkmimetypefinder filename
bitek

Не визнає application/xmlабоtext/xml
Tseng

24

один з інших інструментів (крім файлу), якими ви можете скористатися, є xdg-mime

напр xdg-mime query filetype <file>

якщо у вас є ням,

yum install xdg-utils.noarch

Приклад порівняння xdg-mime та файлу у файлі Subrip (субтитри)

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

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

у наведеному вище файлі відображати його лише як звичайний текст.


xdg-mime query filetype install.sql; xprop: не вдається відкрити дисплей ''
кодер

xdg-mime - це сценарій bash, який багато в чому покладається на змінні середовища. Деякі з них, наприклад, DE не встановлені, якщо ви не ввійшли в сеанс. Перевірте самі$ less $(which xdg-mime)
ManuelSchneid3r

10

версія файлу <5: файл -i -b / шлях / до /
версії файлу> = 5: файл --ime-type -b / шлях / до / файл


1
що ви маєте на увазі під версією файлу?
користувач2867106

1
@ user2867106 Я думаю, що він має на увазі версію файлової команди.
jgh fun-run

4

Спробуйте fileкоманду з -iопцією.

-iпараметр Викликає команду файлу виводити рядки типу mime, а не більш традиційні для людського користування. Таким чином, це може сказати, text/plain; charset=us-asciiа не ASCII text.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.