2010-03-03 4 views
2

моей формы файла элементом очень просто:файл-> getMimeType() всегда возвращает приложения/октет-поток с Zend Framework

$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() 

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

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

ответ

4

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

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

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

+0

FINFO это путь. –

0

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

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

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

3

Сегодня Zend Framework - 1.11.10, и разрешение этой проблемы не передается из ZF2. здесь bug report.

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

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

$upload->addValidator('IsImage', false, array('magicfile'=>false)); 
+0

Хороший ответ. Моя проблема была, безусловно, устаревшей ZF1 'Zend_Validate_File_MimeType'. Любовь, удаляющая строки кода, чтобы исправить проблему. – ficuscr