проблема типа mime для application / octet-stream с codeigniter - PullRequest
1 голос
/ 05 января 2012

У меня странная проблема с классом загрузки codeigniter. Я использую uploadify (http://www.uploadify.com), чтобы добавить поддержку ajax при загрузке файла. Когда файл отправляется из uploadify на codeigniter, я всегда получаю сообщение о том, что тип файла не разрешен. Я провел некоторое исследование и выяснил, что причина проблемы это flash, который используется uploadify. По какой-то причине он всегда отправляет файлы с типом mime application / octet-stream. Я пытался загружать файлы jpg, png, gif, но codeigniter всегда показывает, что это тип application / octet-stream .

Кто-нибудь знает, как мне поймать реальный тип файла, загруженный с помощью flash в codeigneter?

Ответы [ 3 ]

1 голос
/ 05 января 2012

Единственное решение, которое я нашел для этого, это добавить:

'application/octet-stream'

в файл application/config/mimes.php для различных типов файлов, которые вам требуются.Не особенно полезно, но это единственный эффективный метод, найденный.

0 голосов
/ 06 августа 2018

У меня была похожая проблема, и я нашел решение создать библиотеку MY_Upload и переопределить функцию, которая устанавливает тип_файла (_file_mime_type)

class MY_Upload extends CI_Upload {

   /**
    * Override application/octet-stream on file_type
    *
    * @param    array   $file
    * @return   void
    */
   protected function _file_mime_type($file) {
       parent::_file_mime_type($file);

       if ($this->file_type == 'application/octet-stream' && !empty($file['type'])) {
           $this->file_type = $file['type'];
       }

   }

}
0 голосов
/ 29 сентября 2017

Проблема здесь в том, что CodeIgniter, похоже, имеет небольшую ошибку в своем загрузчике, и я согласен с @ bearfriend.

Функция is_allowed_filetype() библиотеки загрузки позволяет параметр $ignore_mime, но этот параметрне поставляется в функции do_upload.Поэтому мое решение - отключить обнаружение пантомимы и (смею сказать) изменить класс загрузки ядра так, чтобы проверка загрузки файла выглядела следующим образом:

if ( ! $this->is_allowed_filetype($this->detect_mime ? false : true))

** Обратное значениетребуется ваш параметр detect_mime

Однако, к сожалению, здесь есть другая проблема безопасности.Пользователь может переименовать вирус.exe в allow.jpg, и файл все равно будет разрешен.Насколько это плохо, зависит от прав доступа к файлам и того, для чего вы используете файлы, а также от того, как эти файлы будут использоваться.Я, например, попробовал эту идею здесь (https://www.bleepingcomputer.com/forums/t/573945/this-looks-new-and-slipped-by-the-gmail-filters-this-morning/#entry3687679), и он не загрузился, потому что это был недопустимый образ. Разные ОС могут отличаться.

Другая проблема с моим решением - если вы решитедля обновления CI эти изменения будут потеряны (хотя, возможно, будут улучшены в более позднем выпуске).

Да, и CI тогда никогда не установит $this->file_type с ignore_mime true. Решение, если вам требуется file_typeв выводе после загрузки вместо этого будет использоваться ваше собственное имя переменной (вместо того, чтобы придерживаться ignore_mime).

...