Fonts TTF文件的MIME类型是什么?

Fonts TTF文件的MIME类型是什么?,fonts,upload,mime,Fonts,Upload,Mime,我找不到TrueType字体的正确MIME类型。我需要它,因为我正在使用文件上传类(CodeIgniter)上传文件,并且我只允许上传TTF。我试过这个: 'ttf' => 'font/ttf' 'ttf' => 'font/truetype' 没有成功 有什么想法吗?我没有使用codeigniter的经验,但我倾向于相信正确的模拟类型是: application/x-font-ttf 我不确定这是否解决了您的问题TTF字体文件具有以下MIME类型:font/TTF

我找不到TrueType字体的正确MIME类型。我需要它,因为我正在使用文件上传类(CodeIgniter)上传文件,并且我只允许上传TTF。我试过这个:

'ttf'   =>  'font/ttf'
'ttf'   =>  'font/truetype'
没有成功


有什么想法吗?

我没有使用codeigniter的经验,但我倾向于相信正确的模拟类型是:

application/x-font-ttf

我不确定这是否解决了您的问题

TTF字体文件具有以下MIME类型:
font/TTF

2017年2月之前:

TTF没有指定MIME类型。你得多用点 常规
应用程序/octet流
,用于指示二进制 没有指定MIME类型的数据


是时候做一些调试了!如果有些东西不起作用,最好的选择是破解代码,弄脏你的手

打开Uploads库(system/libraries/Upload.php),在第200行查找这段代码:

    // Set the uploaded data as class variables
    $this->file_temp = $_FILES[$field]['tmp_name'];
    $this->file_size = $_FILES[$field]['size'];
    $this->file_type = preg_replace("/^(.+?);.*$/", "\\1", $_FILES[$field]['type']);
    $this->file_type = strtolower(trim(stripslashes($this->file_type), '"'));
    $this->file_name = $this->_prep_filename($_FILES[$field]['name']);
    $this->file_ext  = $this->get_extension($this->file_name);
    $this->client_name = $this->file_name;
您将看到$this->file\u类型被设置在那里。var_dump()并查看其中包含的内容

你可能有一些CodeIgniter不知道的晦涩的MIME类型。将该MIME类型放入config/mimes.php,它应该可以正常工作


当你让它工作并接受这个答案时,请用你使用的MIME类型进行评论,我将把它添加到CodeIgniter Reactor中,以确保没有其他人被卡住。

我已经看到
font/ttf
application/x-font-ttf
用作ttf的MIME类型。但是,如果您的文件是以
应用程序/octet流上传的,并且您不想简单地信任
.ttf
文件扩展名(或者如果您想处理没有扩展名的文件),则必须检查文件内容,以查看它们是否为ttf文件。UNIX
magic
文件说

(这是GlyphClassDef表格偏移量的前导
00


如果您的文件以这5个字节开头,它可能是一个TTF。

我知道这已经很旧了,但似乎还没有人提供具体的修复示例。因此,我们为子孙后代准备:

我对Apache2和Chrome也有同样的问题。Chrome会警告说,使用mime类型的application/octet流发送的文件实际上是一个字体文件——事实就是这样

我的修复方法是在我的apache2配置文件中添加以下行:

AddType application/x-font-ttf .ttf AddType应用程序/x-font-ttf.ttf 附言:

我曾尝试更新魔法文件,但在完全重新加载apache2后,该操作失败。我尝试过的匹配(使用字段之间的实际制表符,并按照上面引用的魔术模式)如下:

# True Type fonts 0 string \000\001\000\000\000 application/x-font-ttf 0 string \000\001\000\000\000 TrueType font data mime application/x-font-ttf #真字体 0字符串\000\001\000\000\000应用程序/x-font-ttf 0字符串\000\001\000\000\000 TrueType字体数据mime应用程序/x-font-ttf 你能试试这个吗

application/font-sfnt
正如我在iana中看到的,正确的标题是TTF:

自2017年2月起,添加字体/*媒体类型,这些类型也在列表中列出<代码>字体/ttf
在此列表中。浏览器可能需要一些时间才能赶上。现在有了ttf和otf的媒体类型

见:

ttf是字体/ttf

otf是字体/otf

woff是字体/woff


而woff2字体/woff2

不工作:(在CI中有config/mimes.php文件,其中包含类型为的数组。这是“正确的”,因为(类似于)这是在没有正式指定的MIME类型时使用的。它“不起作用”从某种意义上说,由于没有官方规范,您不能期望接收应用程序知道如何处理它。但是从MIME的角度来看,这是一条路要走,如果您发现经常需要这样做,请向IANA发出正式请求,为该数据类型注册一个适当的MIME类型。请进一步了解如何使用它fy如果文件是TTF?thx检查扩展名?如果您需要代码,请告诉我。我认为您真的不能做比这更多的安全检查。Chrome恼人地对它看到的每个.TTF文件都抛出此警告:资源被解释为字体,但使用MIME类型应用程序/八位字节流传输。@ChrisMoschini这在g应用程序/x-font-ttfinstead@cprcrack在IIS7.5上测试,您是正确的,将.ttf更改为应用程序/x-font-ttf修复了Chrome问题。我看到dkarp的答案表明了这一点,但当我评论他的答案时,他的答案甚至没有在这里看到-很遗憾StackOverflow无法通知我关于特定问题的答案上升,特别是我的问题我已经评论过了。@Phil-它是application/octet stream,但对.EXE来说是一样的,任何识别为TTF的方法都可以,或者我应该使用application/octet stream,并希望用户提交TTF?:)一些浏览器只是把这些事情搞砸了。它也会检查扩展名,这当然不是100%可靠,但谁在乎他们是否将.exe上传为.rtf呢?无论如何,它都不会正确执行。嗯……也许唯一的解决方案是上传文件,然后检查文件名.TTF,如果没有TTF就删除它。CodeIgniter会帮你完成这项工作。只需将此mime添加到您的mimes.php并继续。:)我这样做了,但问题是用户upload.EXE CI是否允许。无论如何,我把它编码为上传后检查扩展。如果不是TTF,请取消文件链接。Thx适用于所有答案。:)@好吧,是的。这是一种启发。如果OP真的想确定,他可以编写一个完整的验证TTF解析器。但是检查前导十六进制
0001 00
是从内容中检测TTF文件的标准方法。将这5个字节放入一个文件
foo
,并从UNIX/Mac提示符调用
file foo
file
命令将响应“
foo:TrueType font data
”。我只是想表现得比实际情况更聪明。谢谢你烤了这个小馅饼德雷特:谢谢!我在IIS配置中使用此mime类型来解决Chrome警告。酷罗伊。很高兴看到这对某人有所帮助:)
application/font-sfnt