Ответ 1
TTF не имеет назначенного типа MIME. Вам нужно будет использовать более общий application/octet-stream
, который используется для указания двоичных данных без назначенного типа MIME.
Я не могу найти правильный тип MIME для шрифтов TrueType. Мне нужно это, потому что я использую File Uploading Class (CodeIgniter) для загрузки файлов, и я хочу разрешить загрузку только TTF. Пробовал это:
'ttf' => 'font/ttf'
'ttf' => 'font/truetype'
Без успеха.
Любые идеи?
TTF не имеет назначенного типа MIME. Вам нужно будет использовать более общий application/octet-stream
, который используется для указания двоичных данных без назначенного типа MIME.
Я видел 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.
Я знаю, что это довольно старый, но, похоже, никто не представил конкретного примера. Итак, вот мы для будущих поколений:
У меня была такая же проблема с 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
Время для отладки! Если что-то не работает, лучшим вариантом является взломать код и испортить ваши руки.
Откройте библиотеку 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, чтобы убедиться, что никто не застрял.
Можете ли вы попробовать это:
application/font-sfnt
Как я вижу в iana, правильный заголовок - это для TTF: http://www.iana.org/assignments/media-types/application/font-sfnt
По состоянию на февраль 2017 года RFC 8081 добавляет типы шрифтов /*, которые также перечислены в Список IANA Media Types. font/ttf
находится в этом списке. Браузеру может потребоваться некоторое время, чтобы догнать.
У меня нет опыта работы с codeigniter, но я склонен полагать, что правильный тип mimetype:
application/x-font-ttf
Я не уверен, что это решает вашу проблему.