我想使用C从文件名中获取MIME类型.有没有办法在不使用包含MIME类型和文件扩展名的文本文件(即Apache的文件mime.types
)的情况下执行此操作?
也许有一个函数来使用文件名获取MIME类型?如果我不需要,我宁愿不使用文件扩展名.
我刚刚为我正在工作的项目实现了这个.libmagic是你正在寻找的.在RHEL/CentOS上,它由file-libs和file-devel提供.Debian/Ubuntu似乎是libmagic-dev.
http://darwinsys.com/file/
这是一些示例代码:
#include#include 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软件包,libmagic手册页就会非常有用.我知道这是一个古老的问题,但是我找到了同样的答案.这是我的首选解决方案.
如果有办法做到这一点,Apache将不需要它的mime.types
文件!
桌子必须在某个地方.它位于一个单独的文件中,由您的代码解析,或者硬编码到您的软件中.前者更清晰,更好的解决方案......
还可以通过检查文件的内容(即头字段,数据结构等)来猜测文件的MIME类型.这是file(1)
程序和Apache的方法mod_mime_magic
.在这两种情况下,他们仍然使用单独的文本文件来存储查找规则,而不是在程序本身中硬编码任何细节.
据我所知,unix命令file
输出带有选项的mime字符串-i
:
> file -i main.c main.c: text/x-c charset=us-ascii