我找不到TrueType字体的正确MIME类型。我需要它,因为我正在使用文件上传类(CodeIgniter)上传文件,并且我只想允许上传TTF文件。尝试过以下代码:
'ttf' => 'font/ttf'
'ttf' => 'font/truetype'
没有成功。
有任何想法吗?
TTF字体文件的MIME类型为:font/ttf
。
2017年2月之前:
TTF没有分配MIME类型。您需要使用更通用的
application/octet-stream
,该类型用于指示没有分配MIME类型的二进制数据。
我看到过 font/ttf
和 application/x-font-ttf
用作 TTF 文件的 MIME 类型。但是,如果您上传的文件被识别为 application/octet-stream
,而您不想简单地信任 .ttf
文件扩展名(或者如果您想处理没有扩展名的文件),那么您将不得不检查文件内容以确定它们是否为 TTF 文件。UNIX 的 magic
文件表示 TTF 文件会以 5 个字节开头
00 01 00 00 00
这是来自GDEF表版本的00 01 00 00
和GlyphClassDef表偏移量前面的00
。
如果你的文件以这5个字节开头,那么它很可能是TTF文件。
00 01 00 00 00
是从内容中检测TTF文件的标准方式。将这5个字节放入一个名为“foo”的文件中,然后在UNIX/Mac提示符下调用“file foo”命令,该命令将响应“foo:TrueType字体数据”。 - dkarp我知道这已经很老了,但似乎还没有人提供具体的解决方案示例。所以我们在这里为未来的人们提供:
我在使用Apache2和Chrome时遇到了同样的问题。 Chrome会警告说发送的带有mime类型为application / octet-stream的文件实际上是字体文件 - 这确实是字体文件。
对我来说,解决方法是在我的apache2配置文件中添加以下行:
AddType application/x-font-ttf .ttf
ps:
我曾尝试更新magic文件,但在完整重新加载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
我没有使用过codeigniter,但我倾向于认为正确的MIME类型是:
application/x-font-ttf
你能试试这个吗:
application/font-sfnt
根据iana的规定,TTF字体的正确头部信息应该是: http://www.iana.org/assignments/media-types/application/font-sfnt
现在是时候进行一些调试工作了!如果某些内容无法正常工作,最好的选择就是打开代码,开始检查。
打开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;