3

我使用 libmagic 在我的项目的 Web 界面中获取文件的 mime 类型。我在 css 和 js 文件上获得 text/plain mime 类型。

例如铬显示以下警告:

Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://localhost:8000/jquery-ui.css".
Resource interpreted as Script but transferred with MIME type text/plain: "http://localhost:8000/jquery.timers.js".

Http 对话框

alex@alex-laptop ~ $ nc localhost 8000
GET /ui.css HTTP/1.1


HTTP/1.1 200 OK
Connection: close
Content-Length: 699
Content-Type: text/plain; charset=us-ascii
Date: Wed, 19 Sep 2012 11:41:48 GMT

...

我怎样才能解决这个问题?

4

2 回答 2

4

不知道你在做什么需要这个。

通常,您会通过扩展名、目录等知道哪些文件是什么。

最简单的方法是检查扩展——但猜测,出于某种原因,这不是一种选择。

您可以制作自定义函数来解析和检测 ecma 和 css:

if (mime==text/plain) { mime = my_parser(data); }

您可以使用验证器并检查它是否验证为 css 或 js。

您可以制作自己的魔法模式文件,在其中测试您想要的东西——这很容易出错;

例如(非常简化)……</p>

文件 my.magic:

0        search/4096    =function\ 
>&0      search/128     =)
>>&0     search/128     ={              JavaScript
!:mime   application/javascript

0        search/4096    ={
>&0      search/512     =transition-    CSS3
!:mime   text/css

0        search/4096    ={
>&0      search/512     =background:    CSS
!:mime   text/css

0        search/4096    ={
>&0      search/512     =color:         CSS
!:mime   text/css

然后编译它:

$ file -C -m my.magic

并使用:

$ file -im my.magic.mgc some_file
于 2012-09-19T15:39:07.210 回答
3

您需要做与 Apache 相同的事情:查阅 MIME 类型的扩展数据库,如果失败,请查阅 libmagic。

文本和 XML 文件通常过于通用,libmagic 无法识别。libmagic 仅用于通过检查几个字节来确定文件类型,因此 CSS 和 JavaScript 的区别不足以确定它们的确切类型。对于 XML,libmagic 必须有相当复杂的规则来确定文件是 XHTML、SVG、XHTML+SVG 还是生成 XHTML 和/或 SVG 的 XSLT。这超出了它的范围。

于 2012-09-19T14:36:12.763 回答