Вопрос

Я хочу получить 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.

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

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

> file -i main.c
main.c: text/x-c charset=us-ascii

Вы можете скачать исходный код & файла " инструмент отсюда:

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

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

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

http://stdicon.com/

Например:

http://stdicon.com/ext/html

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top