当前位置:  开发笔记 > 运维 > 正文

从C中的filename获取MIME类型

如何解决《从C中的filename获取MIME类型》经验,为你挑选了3个好方法。

我想使用C从文件名中获取MIME类型.有没有办法在不使用包含MIME类型和文件扩展名的文本文件(即Apache的文件mime.types)的情况下执行此操作?

也许有一个函数来使用文件名获取MIME类型?如果我不需要,我宁愿不使用文件扩展名.



1> 小智..:

我刚刚为我正在工作的项目实现了这个.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手册页就会非常有用.我知道这是一个古老的问题,但是我找到了同样的答案.这是我的首选解决方案.



2> Alnitak..:

如果有办法做到这一点,Apache将不需要它的mime.types文件!

桌子必须在某个地方.它位于一个单独的文件中,由您的代码解析,或者硬编码到您的软件中.前者更清晰,更好的解决方案......

还可以通过检查文件的内容(即头字段,数据结构等)来猜测文件的MIME类型.这是file(1)程序和Apache的方法mod_mime_magic.在这两种情况下,他们仍然使用单独的文本文件来存储查找规则,而不是在程序本身中硬编码任何细节.


Unix实用程序"文件"通过检查标题,数据结构等对文件类型做出(非常)好的猜测.但它使用单独的文件(通常是/ usr/share/file/magic)来存储查找启发式!Apache的mod_mime_magic以同样的方式工作.

3> lImbus..:

据我所知,unix命令file输出带有选项的mime字符串-i:

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

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有