Получить MIME-тип из имени файла в C
-
05-07-2019 - |
Вопрос
Я хочу получить MIME-тип из имени файла, используя C.
Есть ли способ сделать это без использования текстового файла, содержащего типы MIME и расширения файлов (например, файл Apache mime.types
)?
Может быть, есть функция для получения типа MIME по имени файла? Я скорее не использую расширение файла, если мне не нужно.
Решение
Если бы был способ сделать это, Apache не нуждался бы в его mime.types
файле!
Таблица должна быть где-то. Это либо отдельный файл, который анализируется вашим кодом, либо он жестко запрограммирован в вашем программном обеспечении. Первое яснее, лучшее решение ...
Также можно угадать тип файла MIME, изучив содержимое файла, то есть поля заголовка, структуры данных и т. д. Этот подход используется программой file(1)
, а также Apache mod_mime_magic
. , В обоих случаях они по-прежнему используют отдельный текстовый файл для хранения правил поиска, а не содержат какие-либо подробности, жестко запрограммированные в самой программе.
Другие советы
Я только что реализовал это для проекта, над которым я работаю. libmagic - это то, что вы ищете. На RHEL / CentOS его предоставляют file-libs и file-devel. Debian / Ubuntu выглядит как libmagic-dev. Р>
Вот пример кода:
#include <stdio.h>
#include <magic.h>
int main(int argc, char **argv){
const char *mime;
magic_t magic;
printf("Getting magic from %s\n", argv[1]);
magic = magic_open(MAGIC_MIME_TYPE);
magic_load(magic, NULL);
magic_compile(magic, NULL);
mime = magic_file(magic, argv[1]);
printf("%s\n", mime);
magic_close(magic);
return 0;
}
В приведенном ниже коде используется магическая база данных по умолчанию / usr / share / misc / magic. После того, как вы установили dev-пакеты, man-страница libmagic будет очень полезна. Я знаю, что это старый вопрос, но я нашел его в поиске того же ответа. Это было мое предпочтительное решение.
Насколько я знаю, команда unix file
выводит строку mime с параметром -i
:
> file -i main.c
main.c: text/x-c charset=us-ascii
Вы можете скачать исходный код & файла " инструмент отсюда:
ftp://ftp.astron.com/pub/file/ р>
Дело в том, что он не использует лицензию, подобную GPL, или любую другую в этом отношении.
Если вы хотите использовать веб-сервис, я просто создал его как часть моего mimetype < - > служба значков
Например:
Он работает на appengine, поэтому он должен иметь высокую доступность.