file-> getMimeType () всегда возвращает application / octet-stream с Zend Framework - PullRequest
2 голосов
/ 03 марта 2010

мой элемент формы файла очень прост:

$this->archivo = new Zend_Form_Element_File('archivo');
$this->archivo->setLabel('Archivo:')
        ->setRequired(true)
        ->setDestination(UPLOAD_PATH)
        ->addValidator('Count', false, 1)
        ->addValidator('Size', false, MAX_FILE_SIZE)
        ->addValidator('Extension', false, Application_Form_Multimedia_SubirArchivo::EXTENSIONES_PERMITIDAS);
$this->addElement($this->archivo);

но при загрузке файла (загрузка OK) я пытаюсь получить тип MIME, но для каждого файла одно и то же:

$form->archivo->getMimeType()

Всегда возвращает application / octet-stream , независимо от того, какой файл я пытаюсь загрузить.

Почему это происходит, я что-то упустил на пути? Спасибо

Ответы [ 3 ]

4 голосов
/ 04 марта 2010

Наиболее вероятная причина этого заключается в том, что если в вашей установке PHP отсутствуют расширения fileinfo или mime_magic, используемый вами базовый метод будет использовать mimetype по умолчанию:

if (empty($result[$key])) {
    $result[$key] = 'application/octet-stream';
}

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

3 голосов
/ 07 сентября 2011

сегодня Zend Framework - 1.11.10, и решение этой проблемы не перенесено из ZF2. вот отчет об ошибке .

вот патч . Идея патча заключается в том, что в php5.3 mimefile включен в php, и нам больше не нужен внешний файл.

также, чтобы использовать это исправление, вы должны добавить валидатор следующим образом:

$upload->addValidator('IsImage', false, array('magicfile'=>false));
0 голосов
/ 03 марта 2010

Октет-поток - это, как правило, любой файл, который необходимо открыть в другом приложении.См .:

http://kb.iu.edu/data/agtj.html

Вложение MIME с типом содержимого «application / octet-stream» представляет собой двоичный файл.Как правило, это будет приложение или документ, который должен быть открыт в приложении, таком как электронная таблица или текстовый процессор.Если вложение имеет расширение имени файла, связанное с ним, вы можете сказать, что это за файл.Например, расширение .exe указывает, что это программа для Windows или DOS (исполняемая), а файл, заканчивающийся на .doc, вероятно, предназначен для открытия в Microsoft Word.

...