【问题标题】:What is the MIME type for TTF files?TTF 文件的 MIME 类型是什么?
【发布时间】:2011-07-04 22:12:40
【问题描述】:

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

'ttf'   =>  'font/ttf'
'ttf'   =>  'font/truetype'

没有成功。

有什么想法吗?

【问题讨论】:

标签: fonts upload mime


【解决方案1】:

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

2017 年 2 月之前:

TTF 没有分配 MIME 类型。你将不得不使用更多 一般application/octet-stream,用于表示二进制 没有指定 MIME 类型的数据。

【讨论】:

  • 如何使用它来识别文件是否为 TTF ?谢谢
  • 检查扩展名?让我知道您是否需要该代码。我不认为你真的可以做更多的安全检查。
  • Chrome 烦人地为它看到的每个 .ttf 文件抛出此警告:资源解释为字体但使用 MIME 类型应用程序/八位字节流传输。
  • @ChrisMoschini 使用 application/x-font-ttf 解决
  • @cprcrack 在 IIS7.5 上测试,你是对的,将 .ttf 更改为 application/x-font-ttf 修复了 Chrome 问题。我看到 dkarp 的回答暗示了这一点,但是当我评论他的答案时甚至没有在这里看到 - 太糟糕了 StackOverflow 无法通知我关于特定问题的上升答案,尤其是我评论过的问题。
【解决方案2】:

现在有一个用于 ttf 和 otf 的媒体类型。

见:https://www.iana.org/assignments/media-types/media-types.xml#font

ttf 是字体/ttf

otf 是字体/otf

woff 是字体/woff

而 woff2 是字体/woff2

【讨论】:

    【解决方案3】:

    截至 2017 年 2 月,RFC 8081 添加了 font/* 媒体类型,这些类型也在 IANA Media Types 列表中列出。 font/ttf 在此列表中。浏览器可能需要一些时间才能赶上。

    【讨论】:

      【解决方案4】:

      你能试试这个吗:

      application/font-sfnt
      

      正如我在 iana 中看到的,正确的标题是 TTF: http://www.iana.org/assignments/media-types/application/font-sfnt

      【讨论】:

        【解决方案5】:

        我知道这已经很老了,但似乎仍然没有人提供具体的示例修复。所以我们是为了后代:

        我在使用 Apache2 和 Chrome 时遇到了同样的问题。 Chrome 会警告使用 mime 类型的 application/octet-stream 发送的文件实际上是字体文件 - 确实如此。

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

        AddType application/x-font-ttf .ttf

        ps:

        我曾尝试更新魔法文件,但在完全重新加载 apache2 后无法正常工作。我尝试的匹配项(在字段之间使用真正的制表符,并根据上面引用的魔术模式)如下:

        # True Type 字体 0 字符串 \000\001\000\000\000 应用程序/x-font-ttf 0 string \000\001\000\000\000 TrueType字体数据mime application/x-font-ttf

        【讨论】:

        • 谢谢!我在我的 IIS 配置中使用这种 mime 类型来解决 Chrome 警告。
        • 酷罗伊。很高兴看到这对某人有所帮助:)
        【解决方案6】:

        我已经看到 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。

        【讨论】:

        • @aditya:嗯,是的。这是一个启发式。如果 OP真的想确定,他可以编写一个完整的验证 TTF 解析器。但是检查前导十六进制 00 01 00 00 00 是从内容中检测 TTF 文件的标准方法。将这 5 个字节放入文件 foo 并从 UNIX/Mac 提示符调用 file foo,file 命令将响应“foo: TrueType font data”。
        • 我只是想表现得比实际更聪明。谢谢你烤了不起眼的馅饼。 :D
        【解决方案7】:

        是时候进行一些调试了!如果出现问题,最好的选择是破解代码并亲自动手。

        打开 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 以确保没有其他人被卡住。

        【讨论】:

        • @Phil - 它是 application/octet-stream 但它与 .EXE 相同 有什么方法可以识别为 TTF,或者我应该使用 application/octet-stream 并希望用户提交 TTF? :)
        • 一些浏览器只是把这些事情搞砸了。它也会检查扩展名,这当然不是 100% 可靠的,但谁在乎他们是否将 .exe 作为 .rtf 上传?无论如何它都不会正确执行。
        • 嗯....可能唯一的解决办法是上传文件,然后检查文件名.TTF,如果没有TTF删除它。
        • CodeIgniter 会为您做到这一点。只需将此 mime 添加到您的 mimes.php 并继续。 :)
        • 我做到了,但问题是如果用户上传 .EXE CI 将允许它。无论如何,我在上传后对其进行了编码以检查 EXTENSION。如果不是 TTF,请取消链接文件。谢谢所有答案。 :)
        【解决方案8】:

        我没有使用 codeigniter 的经验,但我倾向于认为正确的 mimetype 是:

        application/x-font-ttf
        

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

        【讨论】:

        • 不工作。 :( 那么在 CI 中有文件 config/mimes.php 包含数组类型。
        • 这是“正确的”,因为(类似于)这是您在没有官方指定的 MIME 类型时使用的。从某种意义上说,它“不起作用”,因为没有官方规范,您不能指望接收应用程序知道如何处理它。但从 MIME 的角度来看,这是要走的路,如果您发现这是一种常见的需求,请向 IANA 提出正式请求,为该数据类型注册适当的 MIME 类型。进一步查看iana.org/assignments/media-types/index.html
        猜你喜欢
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 2011-04-19
        • 1970-01-01
        相关资源
        最近更新 更多