Получить MIME-тип из имени файла в C - PullRequest
8 голосов
/ 08 января 2009

Я хочу получить MIME-тип из имени файла, используя C. Есть ли способ сделать это без использования текстового файла, содержащего типы MIME и расширения файлов (например, файл Apache mime.types)?

Может быть, есть функция для получения типа MIME по имени файла? Я скорее не использую расширение файла, если мне не нужно.

Ответы [ 5 ]

9 голосов
/ 10 декабря 2013

Я только что реализовал это для проекта, над которым я работаю. libmagic - это то, что вы ищете. На RHEL / CentOS его предоставляют file-libs и file-devel. Debian / Ubuntu выглядит как libmagic-dev.

http://darwinsys.com/file/

Вот пример кода:

#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 будет очень полезна. Я знаю, что это старый вопрос, но я нашел его в поиске того же ответа. Это было мое предпочтительное решение.

6 голосов
/ 08 января 2009

Насколько я знаю, команда unix file выводит строку mime с параметром -i:

> file -i main.c
main.c: text/x-c charset=us-ascii
5 голосов
/ 08 января 2009

Если бы был способ сделать это, Apache не нуждался бы в его mime.types файле!

Таблица должна быть где-то. Это либо отдельный файл, который анализируется вашим кодом, либо он жестко запрограммирован в вашем программном обеспечении. Первое яснее, лучшее решение ...

Можно также угадать тип файла MIME, изучив содержимое файла, то есть поля заголовка, структуры данных и т. Д. Этот подход используется программой file(1), а также Apache mod_mime_magic , В обоих случаях они по-прежнему используют отдельный текстовый файл для хранения правил поиска, а не содержат какие-либо подробности, жестко запрограммированные в самой программе.

0 голосов
/ 19 августа 2009

Если вы хотите использовать веб-сервис, я просто создал его как часть моего сервиса mimetype <-> icon

http://stdicon.com/

Например:

http://stdicon.com/ext/html

Он работает на appengine, поэтому он должен иметь высокую доступность.

0 голосов
/ 08 января 2009

Вы можете скачать исходный код инструмента "file" здесь:

FTP: //ftp.astron.com/pub/file/

Дело в том, что он не использует лицензию, подобную GPL, или любую другую в этом отношении.

...