Подтвердить что ты не робот

Что такое тип MIME для файлов TTF?

Я не могу найти правильный тип MIME для шрифтов TrueType. Мне нужно это, потому что я использую File Uploading Class (CodeIgniter) для загрузки файлов, и я хочу разрешить загрузку только TTF. Пробовал это:

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

Без успеха.

Любые идеи?

4b9b3361

Ответ 1

TTF не имеет назначенного типа MIME. Вам нужно будет использовать более общий application/octet-stream, который используется для указания двоичных данных без назначенного типа MIME.

Ответ 2

Я видел font/ttf и application/x-font-ttf, используемые в качестве типов MIME для TTF. Но если ваши файлы загружаются как application/octet-stream, и вы не хотите просто доверять расширению файла .ttf (или если вы хотите обрабатывать файлы без расширения), вам нужно будет проверить содержимое файла, чтобы увидеть являются ли они файлами TTF. В файле UNIX magic говорится, что TTF начнется с 5 байтов

00 01 00 00 00

(00 01 00 00 из таблицы таблиц GDEF и ведущего 00 из смещения таблицы GlyphClassDef.)

Если ваш файл начинается с этих 5 байтов, это, вероятно, TTF.

Ответ 3

Я знаю, что это довольно старый, но, похоже, никто не представил конкретного примера. Итак, вот мы для будущих поколений:

У меня была такая же проблема с Apache2 и Chrome. Chrome предупредил, что файл, отправленный с типом mime-типа/октетом-потоком, действительно был файлом шрифта, который был.

Исправление для меня состояло в том, чтобы добавить следующую строку в конфигурационный файл apache2:

AddType application/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

Ответ 4

Время для отладки! Если что-то не работает, лучшим вариантом является взломать код и испортить ваши руки.

Откройте библиотеку 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() и посмотреть, что он содержит.

Вероятно, у вас есть какой-то непонятный тип MIME, о котором CodeIgniter не знает. Поместите этот тип MIME в config/mimes.php, и он должен работать нормально.

Когда вы его работаете и принимаете этот ответ, прокомментируйте с использованием типа MIME, который вы использовали, и я добавлю его в CodeIgniter Reactor, чтобы убедиться, что никто не застрял.

Ответ 6

По состоянию на февраль 2017 года RFC 8081 добавляет типы шрифтов /*, которые также перечислены в Список IANA Media Types. font/ttf находится в этом списке. Браузеру может потребоваться некоторое время, чтобы догнать.

Ответ 7

У меня нет опыта работы с codeigniter, но я склонен полагать, что правильный тип mimetype:

application/x-font-ttf

Я не уверен, что это решает вашу проблему.