【发布时间】:2011-07-04 22:12:40
【问题描述】:
我找不到 TrueType 字体的正确 MIME 类型。我需要它,因为我正在使用文件上传类(CodeIgniter)上传文件,并且我只想允许上传 TTF。试过这个:
'ttf' => 'font/ttf'
'ttf' => 'font/truetype'
没有成功。
有什么想法吗?
【问题讨论】:
我找不到 TrueType 字体的正确 MIME 类型。我需要它,因为我正在使用文件上传类(CodeIgniter)上传文件,并且我只想允许上传 TTF。试过这个:
'ttf' => 'font/ttf'
'ttf' => 'font/truetype'
没有成功。
有什么想法吗?
【问题讨论】:
TTF 字体文件具有以下 MIME 类型:font/ttf。
2017 年 2 月之前:
TTF 没有分配 MIME 类型。你将不得不使用更多 一般
application/octet-stream,用于表示二进制 没有指定 MIME 类型的数据。
【讨论】:
现在有一个用于 ttf 和 otf 的媒体类型。
见:https://www.iana.org/assignments/media-types/media-types.xml#font
ttf 是字体/ttf
otf 是字体/otf
woff 是字体/woff
而 woff2 是字体/woff2
【讨论】:
截至 2017 年 2 月,RFC 8081 添加了 font/* 媒体类型,这些类型也在 IANA Media Types 列表中列出。 font/ttf 在此列表中。浏览器可能需要一些时间才能赶上。
【讨论】:
你能试试这个吗:
application/font-sfnt
正如我在 iana 中看到的,正确的标题是 TTF: http://www.iana.org/assignments/media-types/application/font-sfnt
【讨论】:
我知道这已经很老了,但似乎仍然没有人提供具体的示例修复。所以我们是为了后代:
我在使用 Apache2 和 Chrome 时遇到了同样的问题。 Chrome 会警告使用 mime 类型的 application/octet-stream 发送的文件实际上是字体文件 - 确实如此。
我的解决方法是在我的 apache2 配置文件中添加以下行:
AddType application/x-font-ttf .ttf
ps:
我曾尝试更新魔法文件,但在完全重新加载 apache2 后无法正常工作。我尝试的匹配项(在字段之间使用真正的制表符,并根据上面引用的魔术模式)如下:
【讨论】:
我已经看到 font/ttf 和 application/x-font-ttf 用作 TTF 的 MIME 类型。但是,如果您的文件以application/octet-stream 上传,并且您不想简单地信任.ttf 文件扩展名(或者如果您想处理没有扩展名的文件),则必须检查文件内容以查看它们是否是 TTF 文件。 UNIX magic 文件说 TTF will begin with the 5 bytes
00 01 00 00 00
(这是 GlyphClassDef 表偏移量中的 00 01 00 00 from the GDEF table version 和前导 00。)
如果您的文件以这 5 个字节开头,则可能是 TTF。
【讨论】:
00 01 00 00 00 是从内容中检测 TTF 文件的标准方法。将这 5 个字节放入文件 foo 并从 UNIX/Mac 提示符调用 file foo,file 命令将响应“foo: TrueType font data”。
是时候进行一些调试了!如果出现问题,最好的选择是破解代码并亲自动手。
打开 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_type 被设置在那里。 var_dump() 看看它包含什么。
您可能有一些 CodeIgniter 不知道的模糊 MIME 类型。将该 MIME 类型放入 config/mimes.php 中,它应该可以正常工作。
当你让它工作并接受这个答案时,请评论你使用的 MIME 类型,我会将它添加到 CodeIgniter Reactor 以确保没有其他人被卡住。
【讨论】:
我没有使用 codeigniter 的经验,但我倾向于认为正确的 mimetype 是:
application/x-font-ttf
我不确定这是否能解决您的问题
【讨论】: